878
1 UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS CARRERA DE INGENIERIA EN SISTEMAS COMPUTACIONALES INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN LAS API DE TWITTER TESIS DE GRADO Previa a la obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES AUTORA: ARACELI MARITZA DAVILA MACIAS DIRECTOR DE TESIS: ING. XAVIER LOAIZA GUAYAQUIL – ECUADOR AÑO: 2012

Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

1

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS

CARRERA DE INGENIERIA EN SISTEMAS

COMPUTACIONALES

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO

EN LAS API DE TWITTER

TESIS DE GRADO

Previa a la obtención del Título de:

INGENIERO EN SISTEMAS COMPUTACIONALES

AUTORA: ARACELI MARITZA DAVILA MACIAS

DIRECTOR DE TESIS: ING. XAVIER LOAIZA

GUAYAQUIL – ECUADOR

AÑO: 2012

Page 2: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

2

APROBACION DEL TUTOR

En mi calidad de Tutor del trabajo de investigación: “INVESTIGACIÓN DE

APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN LAS API DE

TWITTER” elaborado por la Srta. ARACELI MARITZA DAVILA MACIAS,

egresada de la Carrera de Ingeniería en Sistemas Computacionales, Facultad de

Ciencias Matemáticas y Físicas de la Universidad de Guayaquil, previo a la

obtención del Título de Ingeniero en Sistemas, me permito declarar que luego de

haber orientado, estudiado y revisado, la apruebo en todas sus partes.

Atentamente

_______________________

Ing. XAVIER LOAIZA

DIRECTOR DE TESIS

Page 3: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

3

DEDICATORIA

Dedico este proyecto a Dios ya que sin el nada es posible y sé que siempre cuento

con la bendición de él.

A mi abuelita María Moreno Tomalá que aunque no esté conmigo se que desde el

cielo me da las fuerzas para continuar y así culminar mis metas propuestas.

A mis padres Juan Fernando Dávila Moreno y Cleotilde Maritza Macías Pinargote

por toda su esfuerzo, dedicación, amor de padres y sobre todo por brindarme su

apoyo y confianza incondicional y siempre creer en mí para culminar con éxito y

dedicación mis metas propuestas.

A mis hermanos Fernando y María Dávila ya que a pesar de los inconvenientes

nunca dudaron en que culminaría mis estudios superiores como Ingeniera en

Sistemas.

A mis amigos y amigas que siempre me dieron fuerzas para continuar y no declinar

en mi meta propuesta que era la culminación de mi carrera universitaria.

A los maestros de la Universidad de Guayaquil por los conocimientos impartidos que

fueron de gran ayuda para la culminación de mi proyecto de tesis.

Araceli Dávila Macías.

Page 4: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

4

AGRADECIMIENTO

Agradezco a Dios ya que siempre me ayudo a continuar para culminar otra más en mi

vida estudiantil.

A mi abuelita María Moreno Tomalá ya que gracias a ella y a sus consejos sigo

adelante y su recuerdo hace que yo siga adelante día a día y que culmine todas las

metas que me propongo.

A mis padres que a pesar de que no estén los dos juntos a mi lado siempre supieron

estar junto a mi de manera incondicional para darme fuerzas en los momentos más

difíciles que pensé que no sería posible esta gran meta.

A mis hermanos María y Fernando Dávila que a pesar de todo me daban la fuerza

necesaria para continuar día a día y culminar mi proyecto de tesis.

A mis amigos por sus ánimos y apoyo para no desfallecer y poder concluir esta etapa

de mi vida estudiantil en especial a mi amiga la Ing. Alicia Ruiz Ramírez y a mi

amigo el Ing. Poll Cedeño que siempre estuvieron conmigo en este proceso de tesis.

Finalmente gracias a todos los que me han apoyado que son mis familiares, amigos y

docentes y a los que no también ya que aunque quieran verme declinar en mis

objetivos siempre por más duro que sea el camino y los obstáculos que se presente

con la fortaleza de Dios y con mis conocimientos seré capaz de realizar todas las

metas que me proponga.

Araceli Dávila Macías

Page 5: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

5

TRIBUNAL DE GRADO

Ing. Fernando Abad Montero Ing. Juan Chanabá Alcócer DECANO DIRECTOR DE C.I.S.C

Ing. Xavier Loaiza Nombre y apellido DIRECTOR DE TESIS PROFESOR DEL ÁREA - TRIBUNAL

Ab. Juan Chávez AtochaSECRETARIO

Page 6: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

6

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS

COMPUTACIONALES

TEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO

EN LAS API DE TWITTER

Proyecto de trabajo de grado que se presenta como requisito para optar por el título de

INGENIERO EN SISTEMAS COMPUTACIONALES

Autora: Dávila Macías Araceli Maritza

C.I.: 092216316-7

Director de Tesis: Ing. Xavier Loaiza

Guayaquil, ______de_____

Page 7: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

7

CERTIFICADO DE ACEPTACIÓN DEL TUTOR

En mi calidad de Tutor, nombrado por el Departamento de Graduación y la Direcciónde la Carrera de Ingeniería en Sistemas Computacionales de la Universidad deGuayaquil,

CERTIFICO:

Que he analizado el Proyecto de Grado presentado por la egresada DAVILAMACIAS ARACELI MARITZA, como requisito previo para optar por el título deIngeniero cuyo problema es:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO

EN LAS API DE TWITTER

Considero aprobado el trabajo en su totalidad.

Presentado por:

DAVILA MACIAS ARACELI MARITZA C.C. 092216316 -7

DIRECTOR DE TESIS: ING. XAVIER LOAIZA

Guayaquil, ______de_____

Page 8: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

8

ÍNDICE GENERAL

Presentación i

Aprobación del Tutor ii

Dedicatoria iii

Agradecimiento iv

Tribunal de Grado v

Requisito para Obtención del Título vi

Certificado de Aceptación vii

Índice General viii

Índice de Cuadros xi

Índice de Gráficos xii

Resumen xiv

Abstract xv

Introducción 1

CAPÍTULO I EL PROBLEMA 3

Planteamiento del Problema 3

Ubicación del Problema en un Contexto 3

Situación del Conflicto 3

Causas y Consecuencias 5

Delimitación del Problema 6

Planteamiento del Problema o Formulación 6

Evaluación del Problema 7

Objetivos de la Investigación 8

Justificación e Importancia 10

Page 9: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

9

Recursos Tecnológicos 14

Alcances 15

CAPÍTULO II MÁRCO TEÓRICO 16

Antecedentes del Estudio 16

Fundamentación Teórica 18

Fundamentación Filosófica 44

Fundamentación Psicológica 46

Fundamentación Sociológica 47

Fundamentación Pedagógica 49

Fundamentación Legal 50

Preguntas Directrices 53

Variable de la Investigación 54

Glosario de Términos 55

CAPÍTULO III METODOLOGÍA 65

Diseño de la Investigación 65

Modalidad de la Investigación 65

Tipo de Investigación 66

Población y Muestra 68

Población 68

Muestra 70

Operacionalización de las Variables 71

Instrumentos de Recolección de Datos 74

Procesamiento y Análisis 85

Procedimiento de la Investigación 105

Page 10: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

10

Recolección de la Información 106

Criterios para la Elaboración de la Propuesta 107

CAPÍTULO IV MARCO ADMINISTRATIVO 108

Cronograma 108Presupuesto 109

CAPÍTULO V 110

Conclusiones 110Recomendaciones 113Netgrafía 115Bibliografía 116Netgrafía de glosario de términos 118Fuente de gráficos 127

Page 11: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

11

ÍNDICE DE CUADROS

Cuadro No. 1 Población 69

Cuadro No. 2 Muestra 71

Cuadro No. 3 Matriz de Operacionalización de Variables 72

Cuadro No.4 Nivel Informativo 85

Cuadro No. 5 Tecnología en Sociedad. 86

Cuadro No. 6 Noticias Agrupadas 87

Cuadro No. 7 Nivel de Lectura 88

Cuadro No. 8 Relación con Páginas Sociales 89

Cuadro No. 9 Publicidad Gratuita 90

Cuadro No. 10 Interacción con el Creador 91

Cuadro No. 11 Acceso con Login de Twitter 92

Cuadro No. 12 Aplicación de RIAS 93

Cuadro No. 13 RSS 94

Cuadro No. 14 Medio de Comunicación más Utilizada 95

Cuadro No. 15 Consulta a Internet 96

Cuadro No. 16 Término Mashup 97

Cuadro No. 17 Feeds en Páginas Web 98

Cuadro No. 18 Interacción en la Página 99

Cuadro No. 19 Plataforma Web 100

Cuadro No. 20 Interacción con Redes Sociales 101

Cuadro No. 21 Vía Web 102

Cuadro No. 22 Videos Informativos 103

Cuadro No. 23 Instituciones con un Mashup de Noticias 104

Cuadro No. 24 Cronograma 108

Cuadro No. 25 Presupuesto 109

Page 12: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

12

ÍNDICE DE GRÁFICO

Gráfico No. 1: Preferencia en la elección de uso entre Internet y TV 16

Gráfico No. 2: Preferencia en la elección de uso entre Internet y TV,

distribución por género. 17

Gráfico No. 3 Acceso. 21

Gráfico No. 4 Acceso a servicios Web del Proveedor 22

Gráfico No. 5 Representación arquitectónica de un mashup típico. 24

Gráfico No. 6 Formas descriptivas de cómo funciona el Twitter 31

Gráfico No. 7 Comportamiento del Api de Twitter 32

Gráfico No. 8 Como trabaja un CMS (Content Management System) 37

Gráfico No. 9 Funcionamiento de Joomla 37

Gráfico No. 10 Funcionamiento del Mashup de Noticias 39

Gráfico No. 11 Nivel Informativo 85

Gráfico No. 12 Tecnología en la Sociedad 86

Gráfico No. 13 Noticias Agrupadas 87

Gráfico No. 14 Nivel de Lectura 88

Gráfico No. 15 Relación con Páginas Sociales 89

Gráfico No. 16 Publicidad Gratuita 90

Gráfico No. 17 Interacción con el Creador 91

Gráfico No. 18 Acceso con Login de Twitter 92

Gráfico No. 19 Aplicación de RIAS 93

Gráfico No. 20 RSS 94

Gráfico No. 21 Medio de Comunicación más Utilizada 95

Gráfico No. 22 Consulta a Internet 96

Gráfico No. 23 Término Mashup 97

Page 13: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

13

Gráfico No. 24 Feeds en Páginas Web 98

Gráfico No. 25 Interacción en la Página 99

Gráfico No. 26 Plataforma Web 100

Gráfico No. 27 Interacción con Redes Sociales 101

Gráfico No. 28 Vía Web 102

Gráfico No. 29 Videos Informativos 103

Gráfico No. 30 Instituciones con un Mashup de Noticias 104

Page 14: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

14

UNIVERSIDAD DE GUAYAQUILFACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALESTEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADOEN LAS API DE TWITTER

Autora: Dávila Macías Araceli Maritza Tutor: Loaiza Xavier Ing.

RESUMEN

Uno de las componentes principales para la realización de este proyecto es lograr comprenderel concepto ambiguo de la Web 2.0 entendiendo las formas en las que se manifiesta, susimplicancias sociales y las tecnologías que le dan soporte para lograr que su aplicaciónpermita la implementación de este sitio web www.mantentealdia.net. Para desarrollar eltrabajo se ha realizado una investigación en base a diferentes fuentes bibliográficasanalizando los conceptos de la web 2.0, social media, patrones de diseño y diversastecnologías aplicables. También se utilizan componentes como el wamp server y joomla parala realización del presente proyecto.

Los mashups son aplicaciones web generadas a partir de distintas fuentes de información,que se conectan con ésta a partir de una API (Interfaz de programación de aplicaciones)que permite la interconexión con distintos sistemas, aplicaciones, servicios web, ocanales de información (RSS o ATOM). Mashups se han convertido en una corrienteprincipal de la Web. Recientemente, varias plataformas mashup han introducido algollamado centro usuario, lo que permite a los usuarios finales crear, compartir ydisfrutar de sus propios servicios, por esta razón se decidió de entre los diferentestipos de mashup escoger realizar el mashup de noticias de tal forma que los usuariosparticipen de forma interactiva cada vez que ingresen al sitio webwww.mantentealdia.net.

Finalmente se realiza la implementación en open source de un producto final llamadoINVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN LASAPI DE TWITTER en las cuales incluye una aplicación al contexto usuario-administradormediante una solución de software online. En la actualidad dicho servicio se encuentrafuncional y su futuro crecimiento requiere tiempo de maduración y esfuerzo, por lo queseguirá trabajando sobre el tema de manera independiente con la finalidad de innovar unavez finalizada la etapa de tesis de grado.

DescriptoresMashup API de Twitter Mashup de Noticias Web 2.0

Page 15: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

15

UNIVERSIDAD DE GUAYAQUILFACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALESTEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADOEN LAS API DE TWITTER

Autora: Dávila Macías Araceli Maritza Tutor: Loaiza Xavier Ing.

ABSTRACT

One of the main components for this project is to understand the ambiguous conceptof Web 2.0 understanding the ways in which it manifests itself, its social andtechnologies that support it to make your application to enable the implementation ofthis www.mantentealdia.info website. To develop the work was carried out researchbased on different literature sources discussing the concepts of web 2.0, social media,design patterns and various applicable technologies. Components are also used as thewamp server and joomla for the realization of this project.

Mashups are web applications generated from various sources, that connect to it froman API (Application Programming Interface) that allows the interconnection withother systems, applications, web services, or information channels (RSS or ATOM).Mashups have become a mainstream Web. Recently, several mashup platforms haveintroduced something called center user, which allows end users to create, share andenjoy their own services, for this reason it was decided among the different types ofmashup mashup chooses to do so news users to participate interactively each timethey enter the website www.mantentealdia.info.

Finally, making the open source implementation of a final product called mashupsRESEARCH NEWS APPLICATION BASED ON TWITTER API in an applicationwhich includes user-administrator context by a software solution online. Currently theservice is functional and its future growth and maturation takes time effort, so it willstay on the topic independently in order to innovate once the dissertation stage.

DescriptorsMashup Twitter Api News Mashup Web 2.0

Page 16: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

1

INTRODUCCIÓN

El mashup es un terminología en inglés la cual significa mezclar por estas razones

da sus primeros inicios en el ámbito musical a través de la mezcla de pistas musicales

con lo cual surge una nueva tendencia tecnológica la cual fue investigada a través de

la web 2.0 gracias a esto se dan más opciones de investigación por esto se dieron los

mashup en cuanto a videos, mapas, y otras aplicaciones referente a este ámbito.

Las aplicaciones web híbridas o también conocidas como mashup o remezcla son

aquellas que permiten que se combine, de forma innovadora, datos que existen en

diferentes sitos web los cuales normalmente proviene de sitios web de terceros a

través de una interfaz pública o usando un API para de esta forma crear un nuevo

contenido completo.

Una de las características fundamentales de los mashup es que deben presentar una

interfaz muy práctica de fácil navegación y utilidad para mostrar al usuario

información de mayor calidad y cantidad mediante la mezcla de diversas fuentes.

La funcionalidad de los mashups se justifica por el crecimiento exponencial de la

información disponible en la Web. Tanta información es necesario manipularla de

manera rápida y sencilla, puesto que es distribuida en diferentes fuentes de

información, misma que debe ser integrada por el usuario para lograr un acceso

rápido mediante una mezcla dinámica de diferentes páginas web de esta forma

facilitan la combinación de información de una manera sencilla, visualmente atractiva

y eficaz. Están siendo utilizados tanto para uso público como privado en multitud de

combinaciones que facilitan, ordenan y presentan la información de una manera

innovadora.

Page 17: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

2

Mashups son un género interesante de aplicaciones Web interactivas que se basan

en el contenido recuperado de fuentes de datos externos para crear servicios

totalmente nuevos e innovadores. Se trata de una característica de la segunda

generación de aplicaciones Web se conoce informalmente como web 2.0.

Mashups Web son un género interesante de aplicaciones Web interactivas que se

basan en el contenido recuperado desde fuentes externas de datos para crear servicios

totalmente nueva e innovadora. Ellos son un sello distintivo de la segunda generación

de aplicaciones web de manera informal conocido como Web 2.0

La Web 2.0 se ha expandido de forma extraordinaria durante los últimos años

debido a la aparición de una gran variedad de portales Web y APIs para la creación de

servicios. Estas herramientas han permitido a los desarrolladores ser capaces de crear

fácilmente nuevos servicios apoyándose en la composición de servicios y fuentes de

datos distribuidos en Internet.

Los mashups tienen varias tendencias tecnológicas pero la que mas acogida tiene

es el entorno web la cual fue creada hace 6 años teniendo gran acogida y causando

cada vez más personas interesadas en esa tendencia ya que a través de estas

aplicaciones se pueden obtener excelentes resultados acerca de los entornos web.

Las aplicaciones mashups son una tecnología que está en constante desarrollo

debido a las ventajas que ofrece en el ámbito tanto empresarial, educativo y de

entretenimiento. Este nuevo tipo de aplicaciones está provocando un cambio radical

que conllevará a una nueva generación de aplicaciones centradas en los usuarios. Por

esta razón es que mi proyecto se basará en aplicación mashups para noticias basado

en las api de twitter con el cual permitirá al usuario conectarse con las paginas

sociales del momento a su vez interactuar con los diversos módulos que existen en mi

página.

Page 18: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

3

CAPÍTULO I

EL PROBLEMA

PLANTEAMIENTO DEL PROBLEMA

UBICACIÓN DEL PROBLEMA EN UN CONTEXTO

Este proyecto trata sobre la investigación de aplicación Mashup para noticias

basado en las API de Twitter y propuesta de un demo la misma está dirigida a

beneficiar a los estudiantes de la carrera de sistemas con la finalidad de que ellos se

mantengan al día con la información tanto nacional como internacional y esto

contribuya a su desarrollo tanto laboral como profesional.

SITUACIÓN DEL CONFLICTO

Este tema nace de la necesidad investigativa acerca del mashup y los ámbitos

tecnológicos que este abarca entonces se origino la idea de un mashup de noticias ya

que si bien es cierto que existen paginas de noticias las personas no quieren tan solo

leer pero en esta página ellos podrán comentar y hasta ser partícipe del demo de

mashup de noticias basado en las API de twitter.

Con la creación de una página web la cual pueda contestar las inquietudes que las

personas tengan o que le permitan subir noticias entre otras opciones a las cual tendrá

acceso difícilmente se sentirá aburrido ya que permite que las personas ingresen a la

pagina debido a las diferentes alternativas que le ofrece el demo de noticias mashup

basado en las API de twitter.

Page 19: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

4

Hoy en día las personas están actualizadas en cuanto a la tecnología

principalmente con las tendencias que tengan que ver con internet específicamente

con las redes sociales como lo son hi5, Facebook, youtube, twitter, my space, entre

otras.

Debido a la incomodo que es para la gente acceder a estos sitios web y tener

abiertas todas estas páginas cuando navegan en el internet, se ve en la necesidad de

crear una página la cual tenga varios links y desde la misma se pueda acceder a

cualquier tipo de red social con la opción de regresar a la página principal.

Cabe indicar que por la falta de propuesta web de este tipo es que probablemente

algunos negocios no obtengan los mismos réditos por la falta de anuncios

publicitarios para su empresa, también que exista un alto grado de desinformación en

cuanto a las noticias tanto del país como a nivel internacional.

En la actualidad la tendencia a la tecnología va incrementándose día a día llegando

a una realidad en la que la sociedad se actualiza a diario en especial los jóvenes con

el internet, principalmente con las páginas de redes sociales como hi5, Facebook entre

otras, debido a esto se propone la creación del Mashup para noticias basado en

aplicaciones Twitter con la finalidad de brindar a la comunidad beneficios de

actualización de los acontecimientos que ocurren en el país y a nivel mundial,

publicitar anuncios de manera gratuita entre otros beneficios.

Page 20: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

5

CAUSAS Y CONSECUENCIAS

Causas

Desinformación

Tiempo perdido en digitar páginas de interés común

Sitios web monótonos

Sitios web en el que no existan espacios para opinar

Sitios web sin la obtención de beneficios para las personas

Sitios web sin links de referencias

Sitios web que no registra a los usuarios que visitan el sitio

Sitio web que no actualiza la información ni se preocupa por tener más

usuarios en el mismo.

Estética o visualización del sitio web no apropiado como colores fuertes entre

otros aspectos en cuanto a la estética del mismo.

Sitio web que sea complejo de entender al momento de visitar el mismo.

Consecuencias

Poco interés en la lectura

Páginas no encontradas por mala digitación

Personas desinteresadas en visitar estos sitios web. Generará pocas visitas al

sitio web

Posible cierre del sitio web debido al desinterés en visitar el sitio web.

Poca credibilidad en el sitio web

Page 21: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

6

No se considerará tomado en cuenta en el sitio web teniendo una gran

probabilidad de que el mismo jamás regrese a visitar el sitio web.

Usuarios definitivamente dejarán de visitar el sitio web al no encontrar la

información que estén necesitando debido a la no actualización del sitio.

Usuarios que posiblemente no puedan visualizar con claridad el sitio web

obteniendo una negativa del sitio web.

Usuario incomodo que causara definitivamente la salida automática de la

visita del sitio web.

DELIMITACIÓN DEL PROBLEMA

CAMPO: Educación y Comunicación.

ÁREA: Noticias y Aplicaciones Web Interactivas

ASPECTOS: Tecnológicos e Informativos

TEMA: INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS

BASADO EN LAS API DE TWITTER

FORMULACIÓN DEL PROBLEMA

¿Cómo incide la aplicación de MASHUP para noticias basado en las API de twitter

en la comunidad académica de la carrera de sistemas computacionales?

Page 22: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

7

EVALUACIÓN DEL PROBLEMA

Los aspectos generales de evaluación son:

Delimitado: El Mashup para noticias basado en las API de Twitter se propone en base

a las necesidades que maneja la comunidad de los estudiantes de la carrera de

ingeniería en sistemas ya que solo usan el internet para realizar investigaciones o en

el cómo uso de herramientas laborales pero al no tener tiempo de estar informado en

el ámbito de noticias y siendo esto importante para la ellos que serán futuros

profesionales por esta razón se crea este demo que los mantendrá actualizado en

cuanto el área de información y se manejaran otras opciones con la finalidad de que

aporte a la comunidad estudiantil de la carrera de sistemas.

Claro: El demo Mashup de noticias basado en las API de Twitter tendrá grandes

beneficios ya que le brindará al usuario accesibilidad al mundo de la información de

forma gratuita siendo este un demo fácil de manejar usando las tendencias actuales en

cuanto al entorno Web con la única finalidad de obtener un buen producto final que

será optimo de ser usado tanto para la comunidad de los estudiantes de la carrera de

sistemas como para las personas en general.

Relevante: La creación del Mashup para noticias basado en las API de Twitter sirve

de carácter informativo con el único fin de aportar a la comunidad de los estudiantes

de la carrera de sistemas un medio informativo el cual estará vinculado con las redes

sociales y tendrá blocks de comentarios y sugerencias brindándoles un contacto más

directo con el único fin de que ellos sepan que cuentan como sociedad y que su

opinión es de vital importancia para la creación de este medio de comunicación

Page 23: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

8

tecnológica. Original: Esta tesis es interesante ya que la comunidad de los estudiantes de sistemas

tanto como las personas en general se ven en la necesidad de estar informado y en la

actualidad todo incurre en el ámbito tecnológico y las personas pasan más tiempo en

la computadora entonces se propone esta solución optima la cual es la creación de

este demo del mashup basado en las API de Twitter.

Contextual: El trabajo es aplicable en el plano educativo brindando un aporte a la

comunidad de manera significativa debido a que da otra alternativa en elección para

mantenerse informado sin que este afecte en la economía de las personas ofreciendo

beneficios a la sociedad como es información actualizada, publicación de cualquier

tipo de anuncios publicitarios lo que permitirá hacer conocer más a las empresas y

obtener una mayor productividad de ventas en el mismo.

Factible: Este proyecto es factible porque se realiza en un medio tecnológico

interactivo con actividades programadas las cuales siguen un proceso y utilizan

diversos recursos tecnológicos para la ejecución del demo claro que a medida del

desarrollo se puede realizar adecuaciones para así obtener un producto final de

calidad.

OBJETIVOS GENERALES

Coleccionar datos y servicios de diferentes orígenes mezclándolo en una

interfaz gráfica.

Crear el medio de comunicación de conexión entre la aplicación web y el Api

Page 24: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

9

de Twitter.

La Aplicación Web manejara una interfaz que sea fácil de usar para las

personas que accedan a este sitio web.

Aportar conocimientos tanto académicos como intelectuales a los alumnos de

la carrera de ingeniería en sistemas computacionales.

OBJETIVOS ESPECÍFICOS

Mezclar información multimedia en formatos como vídeos, texto o audio

alrededor de un tema en común a partir de fuentes de datos diversas.

Combinar información de motores de búsqueda, servicios web, sistemas de

mensajes, y soluciones de integración de datos con servicios externos.

Implementar un modulo de autenticación que permite a los usuarios con

cuenta de usuario en Twitter poder acceder al sitio de la aplicación web y

autenticarse.

Implementar un modulo que permita visualizar los tweets de cada usuario con

cuenta en twitter dentro del sitio web.

Crear un menú con todas las opciones que brinda la Aplicación Web.

Organizar correctamente el contenido que será mostrado dentro de la

Aplicación Web.

Fomentar la cultura de la lectura en los estudiantes de la carrera de ingeniería

Page 25: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

10

en sistemas computacionales a través del sitio web www.mantentealdia.net.

Crear cultura de participación en los estudiantes y docentes de la carrera de

ingeniería en sistemas computacionales con la finalidad de que ellos

participen y aporten ideas de manera interactiva en el sitio web

www.mantentealdia.net.

JUSTIFICACIÓN E IMPORTANCIA

Los Mashups están revolucionando el desarrollo web del mismo modo que los

weblogs han revolucionado la publicación en línea.

Los Mashups permiten que cualquiera combine, de forma innovadora, datos que

existen en diferentes páginas web. Requieren pocos conocimientos técnicos, las APIS

existentes son sencillas y potentes y los Mashups son relativamente fáciles de diseñar.

Los mashups, en su mayoría tienen un uso no comercial, las personas no deberían

sorprenderse que pronto los Mashup se conviertan en un estándar en la elaboración de

aplicaciones online, debido a la rápida adopción que han tenido por los

desarrolladores, sus usos, portabilidad y flexibilidad.

Los mashup son realmente necesarios pero claro algunos son más útiles que otros

como por ejemplo los más cercanos a los usuarios como Google Maps donde en un

único mapa es un buen avance poder encontrar toda la información sobre restaurantes

de una zona, hoteles, etc; se puede decir que son la evolución de los G.I.S (sistemas

de información geográfica), siendo incluso más accesibles para cualquier

programador o diseñador que desee utilizarlos en su página Web, ya sea personal o

Page 26: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

11

empresarial.

Se pueden destacar como ejemplo las capacidades en cuanto a los aplicativos que

manejan los Mashup como que combina videos, audio e información acerca de tus

cantantes favoritos y wikimapia que reúne mapas de todo el mundo con información

de la Wikipedia sobre lugares de interés en ellos.

No es la novedad lo que hace interesante este tipo de mashups, lo que los

diferencia es la accesibilidad y el hecho de que el número de participantes en

publicidad local con un objetivo está creciendo.

La potencia de los mashups radica en dos pilares básicos:

La facilidad de utilizar los recursos de las fuentes originales de información,

gracias a un API sencillo y bien documentado o fuentes RSS.

La imaginación de los usuarios llega a límites insospechados en la creación de

mashups, lo que permite darle mayor utilidad a los servicios actuales sin tener

que inventarlos desde cero.

Los mashups representan toda una nueva cultura en lo que a medios de

comunicación se refiere, una nueva cultura que ha sido posible por la masificación de

recursos tecnológicos fácilmente accesibles por una cantidad enorme de personas.

Así, usuarios principiantes pueden fácilmente convertir fuentes de información

unidimensionales, estrictamente lineales, en medios interactivos, dialógicos,

reconstructivos.

Page 27: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

12

Los mashups Web permiten a los usuarios construir sus propios servicios en base a

servicios ya existentes mediante el uso de portales y editores. Estos mashups Web

adquieren una dimensión más cercana al usuario cuando el acceso se realiza a través

de la red móvil de un operador, añadiendo otro factor diferenciador respecto a la

cadena de valor tradicional del operador móvil, acostumbrado a crear, y distribuir sus

propios servicios.

Los mashups Web suponen un reto para esta cadena de valor tradicional de los

operadores, al poner en contacto directo al creador y al consumidor de los servicios,

de forma análoga a los prosumers (usuarios que a la vez producen y consumen

servicios o contenidos) de la Web 2.0. Esto limitaría el rol del operador a un simple

transporte de bits, tanto en Internet fija, como en el campo de los servicios móviles.

Las grandes tendencias de desarrollo de software son la reutilización e integración.

La mayor parte de los presupuestos de TI para los próximos años estarán asignados al

mantenimiento y explotación de los sistemas existentes.

Una buena definición de trabajo de un mashup web sería una aplicación web que

viola el origen mismo de la política. El mismo punto de un mashup es crear una

interacción y la comunicación entre el contenido de los proveedores de contenidos

diferentes, lo que, en general, son de diferentes dominios de confianza.

Es de vital importancia la utilización de los Mashup en las empresas por las

siguientes razones:

Page 28: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

13

Control: Obtienen estadísticas de los usuarios que acceden a sus datos y para

que los utilizan.

Marketing: Con los Mashup se descubren nuevas aplicaciones a bajo costo

porque son los usuarios los que las crean. La creatividad se multiplica y las

aplicaciones se prueban antes de decidir si se invierte dinero. No se corre

ningún riesgo y son mucho más efectivas.

Publicidad para la marca.

Incremento en las ventas: En el caso de que sea una página de venta online se

multiplican las visitas porque los usuarios entran por más sitios.

Ingresos por publicidad indirecta e Ingresos por publicidad directa.

Se crean aplicaciones de mucho más nivel y con pocos recursos, porque se

utilizan recursos de otros sitios que se han generado previamente y que tienen

más calidad que si solo lo hiciese una persona.

Se crean tecnologías accesibles.

Experimentación con las últimas tecnologías web y su creatividad.

Esta propuesta justifica su realización debido a que es un tema novedoso porque a

mas de ser una página de tipo informativa, la persona que ingrese a este pagina podrá

conectarse a la misma a través de su usuario de Twitter y automáticamente estará

conectado tanto con la pagina de noticias como con su página de Twitter y adicional a

esto también podrá ingresar a las diferentes redes sociales a través de los iconos que

muestra la página de noticias.

Esta página informativa surgió debido a que en los actuales momentos nos

manejamos en una sociedad que no tiene tiempo de ver noticias ni en televisión como

ni en medios escritos por las múltiples actividades que realizan a diario como es el

trabajo el estudio la familia y las ocupaciones de casa en el caso de las personas que

son padres. Por esta razón viviendo en una sociedad tecnológica se pensó en realizar

esta página informativa con una finalidad específica la cual es que la gente se

Page 29: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

14

mantenga informada ya que en algún momento se hace uso del internet y de esa

manera mantenerse informados a través de esta página.

Adicionalmente a esto la pagina informativa tendrá opciones para que las personas

que ingresan en la misma se registren puedan dar sus comentarios o sugerencias,

suban fotos, publiquen noticias y puedan ver cómo está el estado de usuario en la

pagina informativa en cuanto a las noticias que las personas publiquen.

SOLUCIÓN AL PROBLEMA

Por esta razón se crea la presente aplicación demo de Mashups para noticias

basado en las api de twitter de donde se pueden interactuar con varias páginas por ser

estas de redes sociales a través de una interfaz gráfica de usuario que permite

construir aplicaciones que integran feed, páginas web y otros servicios.

Mediante la interfaz gráfica se extrae la información de las fuentes primarias, y

uniendo varias herramientas mediante “pipes” o tuberías permite adecuar dicha

información y darle forma para al fin obtener el formato de salida deseado.

RECURSOS TECNOLÓGICOS

PHP

MYSQL

JOOMLA

Plataforma Web

Page 30: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

15

ALCANCES PROPUESTOS

Login usando las interfaces de Twitter con lo cual el usuario no tendrá que

volver a registrarse; sino que podrá usar su login propio de twitter.

Proveedor de contenidos: Los datos están disponibles vía una API y protocolo

web como RSS.

El sitio Mashup: Brindará a los usuarios beneficios como publicación de

anuncios, acceso a diferentes páginas de redes sociales desde la página de

mashup entre otros.

Web browser cliente: Es la interface de usuario del Mashup. En una aplicación

web, el contenido puede ser mezclado por los web browser clientes usando

lenguaje web en la interfaz del cliente.

Visualización de la información (interface): Que sea comprensible para el

usuario realizando una interface de tal forma que el usuario pueda entender la

misma al momento de ingresar a la página web de Mashup.

Fomentar la participación de los usuarios: A través de los blogs se dan

múltiples opciones a los usuarios con la finalidad de que emitan sus

comentarios y sugerencias ya sea sobre la página web del Mashup o sobre otro

tipo de actividades.

Cada usuario registrado podrá subir sus propias noticias y mensajes cortos.

Page 31: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

16

CAPITULO II

MARCO TEÓRICO

ANTECENDENTES DEL ESTUDIO

Conociendo que en los registros de la Carrera de Ingeniería en Sistemas

Computacionales perteneciente a la Facultad de Ciencias Matemáticas y Físicas no

existen tema relacionado con el tema de tesis.

El cuestionario que se procedió realizar tiene tan solo una pregunta la cual

enfocaba las preferencias que tienen las personas que fueron encuestadas sobre 2

medios de comunicación diferentes los cuales son el Internet y la televisión con la

única finalidad de definir una parte investigativa del proyecto.

Los resultados obtenidos son los siguientes:

Internet y TV

El 37.9% de los encuestados afirman que prefieren la televisión, frente al 61.1%

que prefiere Internet.

Gráfico No. 1: Preferencia en la elección de uso entre Internet y Tv

Page 32: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

17

Elaborado por: Araceli Dávila M.

Por lo que se refiere a la distribución por género, no cabe destacar ninguna

diferencia importante entre hombres y mujeres. El porcentaje de las personas que

prefieren Internet frente a los que prefieren la televisión permanece en unas cifras

similares entre ambos géneros.

La tendencias generales entre ellos, es la de preferir Internet antes que la

televisión.

Gráfico No. 2: Preferencia en la elección de uso entre Internet y TV, distribución

por género.

Elaborado por: Araceli Dávila M.

Como se observa en los resultados presentados, Internet se alza con una clara

ventaja en relación a la preferencia de uso por parte de los individuos llegando a

superar, en algunos casos, a un medio tan “tradicional” como la televisión.

Es por esto que se da la alternativa de la tecnología como es el uso del internet ya

que este es un medio que nos permite informarnos y nos actualiza de las cosas que

pasan en el país y en el mundo, casi todas las empresas tienen acceso a este medio por

esta razón surge la necesidad de la creación de esta página web que es gratuita con el

único fin de informar a las personas y de que las mismas hagan conocer sus

Page 33: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

18

productos, también se da opción a los individuos que opinen den sugerencias y

comentarios acerca de la página.

Realizando un análisis sobre las tendencias actuales en cuanto a la tecnología se

pudo destacar a los Mashup como una gran innovación tecnológica que se mantiene

hasta ahora tomando en cuenta que tiene un gran nivel histórico ya que sus inicios

son a través de la música.

Por esta razón se propuso un demo de Mashup de tipo informativo que maneje

múltiples opciones de beneficios para los futuros usuarios y que a la vez estos se

mantengan informados ya que este tema es de gran aporte para la sociedad puesto que

interactúa el usuario con la persona creadora del sitio web a través de los Weblog.

FUNDAMENTACION TEÓRICA

MASHUPS

HERNANDEZ “Los usuarios son los principales beneficiarios de los mashups”.

Es de conocimiento que en estos años se ha generado un nuevo boom en cuanto al

fenómeno tecnológico y social Web 2.0 que tiene como elemento principal explotar

distintas capacidades de la Web como plataforma tales como la colaboración, la

intemporalidad y el conocimiento de información a través de tecnologías como AJAX

(Java Script y XML Asíncrono), servicios Web entre otros.

El conjunto de estas tecnologías permite que los desarrolladores tanto

Page 34: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

19

experimentados como novatos intercomunicarse mediante redes sociales tales como

wikis, blogs entre otros. Gracias a estos nuevos servicios se han conseguido grandes

fuentes de información como distintos portales, blogs, comunidades sociales ( por

ejemplo: Wipipedia, Moodle, YouTube) que han quedado esparcidas a lo largo de la

Web facilitando así el uso de la Web por los usuarios.

A partir de esta situación nace la necesidad de poder integrar estas distintas fuentes

dentro de un mismo entorno y poder enlazar las distintas informaciones para obtener

un contenido completo acerca de un tema especifico, ahí es donde nacen los Mashup.

AREVALO “Los mashups revolucionarán los servicios de Internet”

Podemos decir que en este proceso influyen dos fenómenos. Es así que podemos

destacar por un lado, la convergencia de los dominios de Internet y las

Telecomunicaciones alrededor del protocolo IP el cual ha permitido que los

desarrolladores incorporen funcionalidades del mundo de las “telco” a las

composiciones de servicios (mashup) de Internet gracias a la creación de

“habilitadores de servicio” recubiertos por interfaces de servicios Web.

En cambio los nuevos paradigmas y modelos de negocio han colocado al usuario

en el centro de la cadena de valor, permitiendo a individuos sin grandes

conocimientos técnicos crear, gestionar, compartir y ejecutar sus propios servicios.

YEE (2008)

Mashup comenzó a proyectar esta búsqueda de integración

de datos y herramientas no solamente en el contenido de los

blogs, sino también a cualquier punto de la interacción entre

Page 35: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

20

los usuarios y el contenido. ( xxix)

El mashup debe presentar una interfaz muy práctica de fácil navegación y utilidad

para mostrar al usuario información de mayor calidad y cantidad mediante la mezcla

de diversas fuentes.

El contenido usado en mashups es típicamente código de terceros a través de una

interfaz pública o de una API. Otros métodos de codificación de contenido para

mashups incluyen Web feeds (ejemplo: RSS o Atom), Javascript y widgets que

pueden ser entendidas como mini aplicaciones web, disponibles para ser incorporadas

a otras webs.

Un ejemplo importante de la aplicación de los mashups es Google Maps, que en la

actualidad es la aplicación web que más mashups contienen. Ahora son cada vez más

las empresas que apuestan por aplicar los mashups para el desarrollo de aplicaciones,

como Microsoft con Windows Live, IBM con Mashup Center, Amazon, Flickr,

YouTube, por nombrar algunas.

Tecnología Mashup (Arquitectura)

1. Usuario accede al Mashup

2. Acceso a proveedores desde el sitio Web del mashup

Servidor de aplicaciones o similar

Mas capacidad CPU/BW

3. Acceso a proveedores desde el navegador del usuario

Libera servidor Mashup

Page 36: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

21

Más AJAX / RIA

Ejemplo: Google Maps,

El acceso a los proveedores de datos y servicios se puede realizar utilizando una API.

Gráfico No. 3 Acceso

Elaborado por: Araceli Dávila M.

Tecnología Mashup – Web API

Sitio Web del mashup accede a Servicios Web del proveedor utilizando una API.

Beneficios para todos:

API es del proveedor

Existe un acuerdo

Sencillo y documentado

Servidores específicos

Posibilidad de anuncios

Robusto. Gestión de errores.

Page 37: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

22

Gráfico No. 4 Acceso a servicios Web del Proveedor

Elaborado por: Araceli Dávila M.

La funcionalidad de los mashups se justifica en base a los siguientes puntos:

La información disponible en Web y al interior de las empresas crece

exponencialmente. Se necesita usar esa información para manipularla de manera

rápida y sencilla.

La información se encuentra distribuida en diferentes fuentes de información.

Integración dinámica temporal a fuentes de información.

Integración realizada por el usuario y no necesariamente por el área de sistemas.

Acceso rápido a la información significa mayor competitividad y productividad.

Los Mashup ofrecen grandes beneficios tales como:

1. Rápido desarrollo de aplicaciones:

Page 38: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

23

Fuerte reusabilidad de componentes y funcionalidades.

Fácil integración de componentes.

Basado en estándares Web.

2. Participación del usuario en el desarrollo:

Se espera llegar al punto donde los programadores sólo desarrollen los

componentes, mientras que los usuarios sean los que ensamblen estos componentes

en una aplicación fácilmente.

3. Integración de las comunidades sociales:

Se crean comunidades de mashups.

Se comparten componentes y mashups.

Libertad para usar los componentes, compartirlos y alterar las aplicaciones mashups.

Manejo por parte de las comunidades sociales de los componentes y mashups útiles.

Los defensores e impulsores de las aplicaciones Web 2.0 afirman que los mashups

son un ejemplo de este nuevo movimiento en el que los usuarios crean, participan e

interactúan activamente.

Los mashups combinan datos de diferentes servicios, por ello a menudo el valor del

mashup no está dado por el contenido ofrecido sino por la interfaz ofrecida para

acceder a dicho contenido.

A menudo en la forma de mostrar los datos radica el éxito o fracaso del Mashup,

podemos plantearnos la creación de un Mashup para uno de los siguientes cometidos:

Crear una mejor interfaz de usuario de un servicio ya existente, por ejemplo

una mejor navegabilidad y usabilidad de un sitio web en el que su información

puede llegar a ser confusa.

Para unificar diversas fuentes de información, de esta manera se puede ofrecer

Page 39: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

24

al usuario información sobre cierta temática de mayor cantidad y calidad.

Complementar la información original de un sitio web con datos interesantes

y relacionados a esa información.

Por último crear un Mashup requiere una inversión baja, es el trabajo a menudo de

una única persona y con ello puedes aprender acerca de una tecnología algo que

puede llegar a convertirse incluso en una diversión, además puede incluso generar

ingresos con una inversión de trabajo mínima.

Mashup Prototípicos

Aunque hay una gran variación en la interfaz de usuario y las fuentes de datos para

muchos mashups, todavía puede obtener los patrones arquitectónicos comunes que

todos compartimos. Por ejemplo, todos los mashups son REST en la naturaleza (su

conformidad con los principios de representación State Transfer).

Gráfico No. 5 Representación arquitectónica de un mashup típico.

Elaborado por: Araceli Dávila M.

Datos

El elemento central de cualquier mashup es que los datos sean agregados y

presentados al usuario. Los datos estrictamente puede venir de los servicios Web que

los datos se realiza en XML o JSON (este es el patrón más común en base mashups-

Internet).

Page 40: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

25

Hay ventajas y desventajas de arquitectura que se realizarán mediante el

almacenamiento de los datos primarios en un almacén de datos local y el acceso a los

datos con cada petición.

En el movimiento de mashups de ser aplicaciones basadas en Internet, tienden a

depender menos de las tiendas de datos externos.

RSS

El uso de RSS (Really Simple Syndication) es una fuente común o

complementaria de datos primarios para mashups. RSS son fáciles de consumir, ya

que son documentos XM

El formato y especificaciones para los RSS está bien documentado y entendido

con solo unas pocas variaciones entre las distintas versiones.

La extensibilidad de RSS también es conocida, como demostrada por el número

de extensiones en uso hoy en día, como la adición de anexos que la alimenta,

creaciones comunes, información de licencia y localización de la información.

Servicios Web

Dentro de mashups es común ver a ambos basados en servicios web WSDL y

servicios web basados en REST, con algunos servicios exponiendo ambos estilos.

Los servicios Web se pueden utilizar para proporcionar información adicional o se

utiliza para transformar los datos.

Por un mashup basada en el mapa, los datos sólo pueden contener direcciones de

calles y una llamada a un WSDL o basados en servicios Web REST-puede ser

Page 41: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

26

necesario traducir el nombre de la calle a una Longitud Latitud coordinar para el

mapa.

Plataforma de Servicios

Proporcionan una funcionalidad más allá de la típica solicitud / modelo de

respuesta de los servicios tradicionales de Servidores Web.

Mashup Aplicaciones

La aplicación mashup es una combinación de servicios de nivel medio y algo de

lógica de negocios ligeros.

Por Mashup basados en Internet, el software se escribe generalmente usando

tecnologías web (como PHP o ASP. NET), pero estamos empezando a ver la línea

entre servidores de procesamiento y la aplicación cliente servidor, con la aparición de

aplicaciones dinámicas de Internet (RIAs). RIAs son aplicaciones que se ejecutan

dentro del navegador con una rica funcionalidad similar a la de muchas aplicaciones

de escritorio. Estos normalmente no requieren una instalación en el cliente más allá

en un genérico plug-in como Adobe Flash o Silverlight de Microsoft.

Aplicación Cliente

La aplicación cliente es como el mashup se entrega y se presentan al usuario. Para

el público en Internet mashups la más común aplicación cliente es un navegador Web

browser que recibe HTML y JavaScript de entrega desde un servidor Web a través de

HTTP. Sin embargo, hemos comenzado a ver mashups siendo entregadas con

plataformas RIA tanbien. En este modelo, el cliente puede proporcionar riqueza

Page 42: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

27

visual más e incluso pueden ofrecer algunos de los mashup de procesamiento en lado

del cliente.

Orientación futura de Mashups

Con las primeras versiones de mashups gran parte de la implementación fue muy

tedioso y lento. Muchas de estas del lado del servidor de procesamiento utilizado (a

menudo con PHP o Perl) y del lado del cliente tediosa secuencia de comandos en

forma de código JavaScript a fin de crear la experiencia mashup. Era común que la

persona que crea los mashups para crear código personalizado para analizar el código

XML devuelve conjuntos que han recibido de sus fuentes de datos.

Con el tiempo ha pasado y el proceso de desarrollo ha madurado, muchas de las

tediosas codificaciones han sido sustituidas por marcos y una mejor codificación de

las normas. Las costumbres de scripts personalizados en el lado del servidor están

comenzando a ser sustituido por las librerías estandarizadas que automáticamente

generará el script También estamos viendo la estandarización en los formatos de

mensaje.

Marshall Kirkpatrick (2008)

Pienso que los Mashup son una parte de una tendencia

más grande en la Web 2.0 respecto a la portabilidad de

datos. (97)

La creación de mashups que una vez fue sólo el dominio del desarrollador, pero

hay un movimiento para poner la capacidad de crear mashups directamente a las

manos del cliente final. Como los que son marcos para crear mashups son cada vez

más fácil de usar y de los formatos de mensajes son cada vez más estandarizados, el

siguiente paso lógico es la construcción de herramientas que pueden crear mashups.

Algunas de estas herramientas se centrarán en el consumidor final de los mashups.

Page 43: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

28

Tubos de Yahoo por Microsoft Popfly y son ejemplos de marcos y herramientas

para permitir a los usuarios crear sus propios mashups.

Se está viendo un aumento de la importancia del esquema de metadatos comunes y

en el desarrollo de mashups. Se describen en la sección anterior cómo el esquema

común de RSS hace que sea fácil para incorporarlos en mashups. Los mismos

principios se deben aplicar a otros tipos de datos, así (tan robusto como RSS es que

no puede modelar todos nuestros datos en ese formato).

EL API DE TWITTER

JOHNSON describe la mecánica básica de Twitter como "muy simple"

Una Interfaz de Programación de Aplicaciones o API (del inglés Application

Programming Interface) es la forma en que los programadores de aplicaciones o

páginas web se comunican con el servidor sin tener acceso a la base de datos en sí,

dicho de manera más simple es la forma como los programas o páginas web que

utilizas para Twittear por ejemplo, el TweetDeck, Gravity, ÜberTwitter, SocialScope,

Seesmic y otros se comunican con Twitter para obtener los datos.

Twitter en su inicio empezó como un proyecto de investigación el cual era usado

internamente por la compañía para realizar las respectivas pruebas del mismo, luego

su lanzamiento fue en octubre del 2006.

Siendo el Twitter una red social que crecía rápidamente siendo el sitio de

Page 44: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

29

microblogging más popular que era en idioma inglés, por esta razón en el año 2009 se

publico una aplicación para traducirlo en español, francés, italiano y alemán. Mucha

gente está desarrollando Aplicaciones y Mashups gracias a la API de Twittter.

Twitter es una de las redes sociales de mayor crecimiento, basada en el concepto

de "microblogging", que permite a los usuarios postear mensajes de una longitud

reducida en número de caracteres. A través de las API de Twitter cualquiera puede

crear aplicaciones que comuniquen con el servicio de la mencionada red social.

Generalidades del Api de Twitter

Twitter pone a disposición de los usuarios tres APIs distintas que son Streaming

API, REST API y Search API las cuales serán aplicables a necesidades diferentes

para llevar a cabo sus objetivos.

El Streaming API es la manera clásica en que las aplicaciones y compañías se

conectan a la información de Twitter. Se establece una conexión permanente por

usuario con los servidores de Twitter y mediante una petición http se recibe un flujo

continuo de tweets en formato json. Se puede obtener una muestra aleatoria

(statuses/sample), un filtrado (statuses/filter) por palabras claves o por usuarios. Si

además como usuarios le damos a las compañías nuestro permiso mediante el registro

y el sistema de seguridad OAuth entonces la API otorga acceso también a nuestros

tweet privados, mensajes directos, etc. y es así como herramientas de administración

de Twitter pueden mostrarnos en varias columnas nuestros diferentes tipos de tweets

y ayudarnos a contestarlos.

El REST API ofrece a los desarrolladores el acceso al nucleo de los datos de

Twitter. Todas las operaciones que se pueden hacer vía web son posibles realizarlas

desde el API. Dependiendo de la operación requiere o no autenticación, con el mismo

criterio que en el acceso web. Soporta los formatos: xml, json, rss, atom.

Page 45: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

30

El Search API suministra los tweets con una profundidad en el tiempo de 7 díasque se ajustan a la query solicitada. Es posible filtrar por cliente utilizado, lenguaje ylocalización. No requiere autenticación y los tweets se obtienen en formato json oatom. Se puede considerar que el microblogging es la confluencia de dos de estas formas

de difusión de información. Por una parte es una simplificación de un blog

reduciendo el tamaño de sus entradas a la unidad mínima de información: un

pensamiento, una imagen, un enlace, una pregunta, etc. Pero también puede verse

como la evolución e independización de los mensajes de estado en las redes sociales y

de mensajería instantánea.

En la actualidad aunque existen múltiples servicios de microblogging (Tumblr,

Plurk, Emote.in, Squeelr, Jaiku, etc.), el más popular entre este tipo de servicios es

Twitter que ofreciendo un servicio muy simple centrado en la accesibilidad y

facilidad por parte de los usuarios para ver y generar contenido, permite una frescura

de información sin precedentes.

La parte del éxito de Twitter ha sido proporcionar una API funcional desde sus

inicios, esto permite que otras personas extiendan las características que Twitter

ofrece, con lo cual pueden desarrollar aplicaciones para enviar y compartir nuestros

tweets sin estar obligados a utilizar el sitio oficial.

Es realmente interesante ver cómo han surgido proyectos que permiten apreciar y

analizar los datos del servicio en diferentes formas y esto gracias a que Twitter pensó

en grande y comparte sus datos vía la API.

Enrique López Tello (2008)

La web 2.0 es la entrada es la puerta de entrada a una

nueva realidad donde se rompen las clásicas barreras

entre una buena idea y su realización en el mercado. La

Page 46: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

31

red permite atacar los proyectos tradicionales, y otros

hasta impensables, con unos niveles de productividad en

costo y tiempo desconocidos hasta ahora. ( 14 )

En esta era Web 2.0 aplicaciones web que tienen un fácil de usar, intuitiva API

tienen una clara ventaja ya que permite a los desarrolladores explotar y desarrollar

para la plataforma y así captar más usuarios. A medida que avanzamos hacia la web

social y mashups una buena API es absolutamente necesario.

Gráfico No. 6 Formas descriptivas de cómo funciona el Twitter

El

a b

o ra

d o

por: Araceli Dávila M.

Características del Twitter

Es una herramienta de comunicación.

Lugar para socializar.

Construir credibilidad.

Page 47: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

32

Establecerse como experto.

Ventajas del Twitter

En general es una herramienta simple una vez que superamos la primera

impresión.

Constantemente dinámico

Tiene una multiplicidad de aplicaciones que posibilitan su expansión.

Es relativamente editable, posibilitando la personalización a gusto del usuario.

Más edición, más comodidad.

WILLIAMS

En Twitter les gustaría colaborar más con Facebook, ya que

la colaboración podría resultar en una experiencia mejor,

pero no condena a la red social por no permitirlo, afirmó.

Twitter aparece en innumerables sitios web personales y profesionales hoy en día,

si se trata de un simple "Follow me" insignia en el encabezado o una exhibición de

los últimos tweets de la autora en la barra lateral. Ya no es una moda, Twitter es ahora

una necesidad para cada sitio web, no sólo por compartir sus pensamientos y

mantenerse en contacto con la gente, sino también para el marketing, la publicidad y

la búsqueda aún.

Gráfico No.7 Comportamiento del Api de Twitter

Page 48: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

33

Elaborado por: Adam Green

Seguridad de los clientes Twitter más utilizados

El uso de OAuth no está extendido, pero es de esperar que se adopte tarde o

temprano, dada la intención de Twitter de eliminar el soporte para la autenticación

básica. Este mecanismo tiene ventajas importantes en cuanto a seguridad, y se cree

que a pesar de su aparente mayor complejidad, una vez que su uso esté popularizado

y existan librerías funcionales para la mayoría de lenguajes, todos los clientes

terminarán por migrar a esta solución para el beneficio de los usuarios.

Aunque se utilice autenticación básica, la mayoría de clientes utilizan conexiones

cifradas de tal forma que el usuario está protegido frente a robo de credenciales y

secuestros de sesión.

No obstante, aunque exista protección ante ataques de terceros, se siguen confiando

las credenciales de acceso a una aplicación de la que muchas veces no se puede

determinar su nivel de seguridad o su legitimidad.

Teniendo en cuenta estos puntos se sugieren las siguientes recomendaciones

adicionales:

Los usuarios deben comprobar las características de seguridad de los clientes,

buscando un compromiso entre funcionalidad y nivel de seguridad deseado, dando

Page 49: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

34

preferencia a aquellos clientes que utilicen OAuth y cifren las comunicaciones.

Los desarrolladores de aplicaciones deben conocer y seguir en la medida de lo

posible las recomendaciones de Twitter, que se pueden resumir en utilizar OAuth para

la autenticación y sobre todo cifrar las comunicaciones para cualquier acceso que

requiera autorización.

Por parte de Twitter existen posibles medidas a tomar para mejorar la seguridad

ofrecer a los usuarios utilizar SSL para todas las peticiones como una opción de

configuración de la cuenta (tal y como hace Google en Gmail), de tal forma que si se

activa automáticamente redirige tus peticiones al sitio HTTPS.

DEMO MASHUP DE NOTICIAS BASADO EN LAS API DE TWITTER

DIAZ “Los mashups no suponen un riesgo para los usuarios”

La aplicación Web del demo Mashup de Noticias basado en las Api de Twitter se

realizara con Joomla.

Los administradores del equipo de desarrollo de Mambo a mediados del 2005,

decidieron limitar las condiciones de la licencia de uso de software de su empresa,

esto provoco que los principales desarrolladores estén en desacuerdo y fue asi que

más de 30 miembros principales del equipo renunciaron y fundaron Joomla una

palabra de origen africano que significa “todos juntos”, un CMS (Content

Management System) que funcionaba con el núcleo de Mambo, pero con cambios

importantes en el código y lo mejor de todo es software libre.

Page 50: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

35

Esto fue algo innovador debido a que no tan solo los desarrollares de Mambo

migraron a este nuevo proyecto si no que lo apoyaron miles de diseñadores

colaboradores y comunidades enteras al enterarse la noticia de la acción ejecutada por

Mambo y sus propietarios.

Por esta razón el proyecto Joomla tomó aún más energía, llegando a ser la

aplicación web que hoy conocemos teniendo excelentes características de gestión

integral y con un futuro bastante promisorio en el ámbito de la Web 2.0.

En Joomla podemos encontrar las siguientes ventajas:

Se puede destacar que para trabajar con Joomla, no se necesita ser un experto

programador web, ni tener grandes conocimientos de PHP, HTML entre otros

lenguajes de programación referente al entorno web.

Las personas que utilicen joomla ya sean los programadores, diseñadores o

personas que recién quieren comenzar a trabajar con joomla, tienen la opción

de acceder a todo el código fuente y modificarlo según las necesidades que

tenga cada persona que haga uso de este gestor de contenidos.

Al ser joomla un software libre, no necesita pagar licenciamiento y es libre de

ser usado por cualquier persona o empresa.

Joomla posee más de tres mil extensiones, proporcionando así a las personas

ampliar las posibilidades y características de joomla en el caso de que busquen

más opciones para ampliar los diferentes sitios web que estén realizando.

Page 51: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

36

Joomla a diferencia de otras plataformas permite una velocidad de carga muy

rápida de sus páginas gracias al sistema de caché.

Joomla al tener un grupo de desarrolladores y toda una comunidad que brinda

conocimientos y aportes para que todos se beneficien, siempre es un software

en constante evolución por lo cual trabajan día a día para ofrecer un software

de calidad mejor y más seguro.

Se maneja una versatilidad en los diseños ya no se limita tan solo a un

encabezado o pie de página, cualquier idea de diseño es posible llevarla a cabo

mientras estas se ajuste a cada usuario que está realizando estas interfaces.

En la actualidad Joomla representa más que la existencia de una aplicación web

avanzada. Es la demostración palpable de la superioridad que puede alcanzar el

software libre cuando está presente el esfuerzo común activo y organizado de una

numerosa comunidad global.

Joomla es un potente gestor de contenidos web (CMS o Content Management

System) que permite crear sitios web elegantes, dinámicos e interactivos. Por su

diseño, potencia, flexibilidad y por sus enormes posibilidades de ampliación se está

convirtiendo en el sistema de publicación preferido por muchos centros educativos y

por millones de webmasters en todo el mundo para desarrollar su portal web.

Es importante saber cómo están organizados los diferentes elementos que

intervienen en Joomla y cómo actúan para devolver los resultados esperados.

Cuando un usuario escribe o hace click en nuestra dirección web, el index.php

inmediatamente “llama” a la plantilla que estamos usando.

Page 52: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

37

En el index de la plantilla se encuentra buena parte de la información de

estructura de la web, y casi toda la información de los estilos. No toda la estructura se

controla desde la plantilla porque ésta, a su vez, “llama” a los elementos que el

diseñador incluyó con anterioridad.

Gráfico No. 8 Como trabaja un CMS(Content Management System)

Elaborado por: Adan Avelar Islas

Es decir, si en la plantilla se requieren módulos, entonces aparecerá el Módulo

específico que originalmente se encuentra en su directorio y ahora se refleja en el

sitio. Igualmente sucede con los Componentes.

Los Módulos y Componentes tienen insertada su propia estructura HTML, así

como instrucciones PHP particulares para cada caso, y algunas veces hasta su propia

hoja de estilos CSS. Los Módulos están en el directorio /modules/ y los Componentes

en /components/.

Page 53: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

38

Gráfico No. 9 Funcionamiento de Joomla

Elaborado por: Isidro B.

Mashup de Noticias

El periodismo mashup se presenta como una novedad que aparece de una forma y

en un contexto sumamente interesante en el desarrollo del ciberperiodismo.

Este mashup sirve para combinar datos, concretamente se mezclan datos

procedentes de más de una fuente distinta y se obtienen como resultado datos

combinados y con un valor añadido con el que no contarían por separado. En

definitiva, estas plataformas se han categorizado de este modo, atendiendo

únicamente a su forma de manejar los datos. Un ejemplo sencillo sería su utilización

en sindicación de contenidos (RSS).

Por un lado, no se trata de un volcado de contenidos, estructuras y modelos de un

soporte ajeno (el papel) al periodismo on-line. En este caso, el cambio radica en un

desplazamiento de aplicaciones puramente virtuales concebidas con finalidades

comerciales, publicitarias al terreno informativo. Por otro lado, los mashup aportan

una nueva concepción del multimedia que recupera potencialidades únicas y de gran

importancia en el escenario on-line-comunicativo no como la convergencia de

atributos informativos, la interactividad y la actualización constante de contenidos,

entre otros.

BERNAL

Page 54: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

39

Imagina futuras aplicaciones empresariales basadas en el

mashup: Por ejemplo, una aplicación de Gestión de

Relaciones con el Cliente, que permita crear funcionalidades

que le ayuden a colaborar con una empresa y viceversa

La novedad radica no sólo en el proceso de construcción de mensaje y, por ende,

de sentido sino también en las amplias posibilidades de articular mensajes similares,

complementarios o contrarios respecto a los que presentan los medios de

comunicación.

Gráfico No. 10 Funcionamiento del Mashup de Noticias

Elaborado por: Víctor Domínguez

Soluciones de Información y Alerta Ciudadana

La información útil va hacia el ciudadano interesado vs. el ciudadano

persigue la información.

Rastreo automático + distribución selectiva

Servicios de Datos SOA para exportación de información administrativa a

otros organismos.

Page 55: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

40

Colaboración ágil y no instructiva.

Atención al Ciudadano

Visitas únicas de Información de Ciudadano

Integración del Contact Center con el back office:

Incluso en caso de outsourcing

Integración de procesos internos o externos.

Tecnología Mashup de Noticias para una Nueva Generación de Portales de la

Administración

Ventajas:

Los Data Mashups permiten explotar con eficacia todo el espacio de

información disponible, interno y externo.

Enfoque no intrusivo, con aplicación en muy diferentes escenarios.

El despliegue es incremental; los resultados, casi inmediatos.

Consecuencias:

Se visualiza una verdadera ventanilla única online.

Se refuerza la imagen de cercanía del ayuntamiento o comunidad autónoma.

Sirve para canalizar ayudas y recursos externos hacia los ciudadanos de una

región/localidad.

COMUNIDAD ACADÉMICA DE LA CARRERA DE INGENIERIA EN

SISTEMAS COMPUTACIONALES

Page 56: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

41

Es importante destacar que la carrera de ingeniería en sistemas computacionales

aporta un gran beneficio a la sociedad ya que brinda y entrega a la sociedad

profesionales capaces de desempeñarse en cualquier ámbito empresarial referente al

ámbito de la ingeniería en sistemas.

Por esta razón y formando parte de esta comunidad académica de la carrera de

ingeniería en sistemas computacionales se decidió en realizar un estudio acerca de

temas que sugerían los estudiantes con respecto a lo que tenían o querían ver reflejado

en la carrera de ingeniería en sistemas computacionales.

Luego gracias a este estudio fueron apareciendo posibles opciones para que

aporten grandes beneficios a esta comunidad de la carrera de sistemas en donde gano

una opción en la cual se decidió realizar una encuesta con un número determinado de

preguntas y dirigida específicamente a un grupo especifico de esta comunidad como

son los estudiantes de séptimo y octavo semestre de la carrera de sistemas debido a

que ellos ya tienen un criterio profesional mas formado y saben hacia donde van en

cuanto a su futuro profesional dentro del ámbito de sistemas computacionales y

también dirigido a los docentes que imparten cátedra en estos cursos.

Finalmente ganaron las tendencias tecnologías y es aquí donde surge el tema del

proyecto el cual es INVESTIGACIÓN DE APLICACIÓN MASHUP PARA

NOTICIAS BASADO EN LAS API DE TWITTER el cual ofrecerá a esta

comunidad estudiantil grandes beneficios como es el estar informados dentro de la

universidad a través de los laboratorios tan solo con ingresar a este sitio web

www.mantentealdia.net, se podrá realizar una participación conjunta con todos los

estudiantes de la carrera que se encuentren conectados donde podrán chatear, subir

videos, subir noticias entre otras opciones que tendrá este sitio web.

Page 57: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

42

Siempre pensando en los diversos usuarios que tendrá debido a las visitas que habrán

en el sitio web www.mantentealdia.net ellos podrán escribir sus sugerencias y si

quieren aportan con ideas que mejoren este sitio web mediante la opción contáctenos

escriben lo que deseen y el administrador se contactara con ustedes para trabajar en

conjunto para beneficio del sitio web y de la comunidad de sistemas también.

PLAN DE TRABAJO PARA FOMENTAR LA CULTURA DE LA LECTURA

EN LOS ESTUDIANTES DE LA CARRERA DE INGENIERÍA EN SISTEMAS

COMPUTACIONALES A TRAVÉS DEL SITIO WEB

MANTENTEALDIA.NET

El sitio web mantentealdia.net desde que fue creado tuvo participación directa con los

estudiantes de la carrera de ingeniería en sistemas es así que se realizó un módulo

llamado blogger en el cual presenta una lista de las personas que más han publicado

noticias en el sitio teniendo una gran aceptación de los estudiantes de la carrera de

ingeniería en sistemas.

Para lo cual se recibió un gran apoyo de este grupo de estudiantes que se conectaron

al sitio web, participando en conversaciones a través del chat, también enviaban sus

comentarios a través del menú contáctenos brindando un gran apoyo para el

crecimiento y progreso de este sitio web.

Mediante este sitio web los estudiantes los cuales tienen un pensamiento compartido

como la gran mayoría de personas que es el no tener tiempo para leer, el ser perezoso

en la lectura y más aún el estar desinformado debido a que se tiene el concepto que

las noticias solo serán en la televisión ya que en el resto de medios no hay tiempo

para buscar los link. Por esta razón se creó el sitio mantentealdia.info ya que está

Page 58: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

43

tiene acceso a redes sociales que es una gran publicidad ya que los jóvenes de la

actualidad solo pasan en las redes sociales, por otro lado al ser una página realizada

para la comunidad de los jóvenes de la carrera de sistemas, ellos se podrán encontrar

a través de este sitio y podrán tener otro tipo de vínculo para estar en contacto, ya

que al ingresar cada joven de la comunidad de la carrera de sistemas u otra persona

particular al dar click solo a un link ellos podrán enterarse de todas lo que esté

sucediendo en la actualidad y tan solo en pocos minutos estará al día en cuestión de

noticias.

Con la creación de este sitio web mantentealdia.net se deja atrás esas excusas de no

tener tiempo de la pereza al leer, del desconocimiento de noticias por no poder ver la

televisión debido a que se llega tarde a la casa. Siendo este un precedente para estar

informado de lo que pasa en la actualidad tan solo con ingresar unos pocos minutos al

sitio web.

CULTURA DE PARTICIPACIÓN EN LOS ESTUDIANTES Y DOCENTES DE

LA CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES

La participación se puede definir como un reconocimiento de lo que las personas son

capaces de hacer e implica que ellos sean miembros de la sociedad, capaces de pensar

y expresarse por sí mismos. La capacidad de participar depende de poseer una buena

disposición para pensar en las opiniones.

La participación es un largo proceso, su práctica requiere aceptar distintos tipos de

expresiones culturales (desde las más conocidas a otras desconocidas), entender sus

códigos y mensajes, abrir canales de comunicación entre las distintas culturas,

habilitar el espacio para tomar decisiones. Se trata de profundizar en el derecho a

incluirse libremente como consumidores y como productores de cultura dando pie a

Page 59: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

44

conocer y experimentar en las diferentes manifestaciones culturales.

El proyecto cuenta con diferentes módulos que se ponen a disposición de los alumnos

pero también del profesor los cuales disponen de un acceso a contenidos del mismo y

pueden sugerir modificaciones para ser una sitio web mas óptimo.

FUNDAMENTACIÓN FILOS Ó FICA

El filósofo francés Edgar Morin y su “Teoría del Pensamiento Complejo” en la

actualidad se la podría comparar como una arquitectura TI (Tecnología de la

información) basada en el Mashup de Noticias frente a las arquitecturas clásicas la

misma que propone una visión holística del hombre, de la educación, del mundo;

frente a posturas unidimensionales. Este filósofo en su teoría nos indica que no se

puede entender al hombre en su complejidad desde una sola perspectiva, ya que así

no se podrá llegar al conocimiento del hombre solo desde el estudio de la psicología,

economía, etc. Morín nos habla de nuevas disciplinas (Meta-disciplinas) que

relacionando conocimientos anteriores lleguen a nuevas conclusiones.

La teoría de Morín sirve para utilizar, a modo de metáfora, las formas en las que

se han relacionado diferentes disciplinas para compartir su conocimiento. Si

comparamos estos escenarios con las diferentes arquitecturas de TI utilizadas en la

actualidad vemos que las semejanzas son sorprendentes.

Interdisciplina: Puede significar pura y simplemente que diferentes disciplinas se

sientan en una misma mesa, en una misma asamblea, como las diferentes naciones

se reúnen en la ONU sin poder hacer otra cosa que afirmar cada una sus propios

Page 60: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

45

derechos nacionales y sus propias soberanías en relación a las usurpaciones del

vecino. Interdisciplinariedad puede también querer decir intercambio y

cooperación.

La interdependencia “no configurable” entre plataformas es un problema de

primer orden en una gran organización que se mueva en un entorno de negocio

dinámico. Algunos de los problemas: integridad de las bases de datos y capacidad

de rollback, calidad de los datos, gestión de los metadatos. Veamos un caso: un

banco quiere integrar el CRM con la Intranet y con el Terminal Financiero en

un “Escritorio Integrado”. Es una integración de front-end que requiere una

interacción bien articulada con los sistemas en el back-end. ¿Qué hacemos aquí?

¿Tiramos de esfuerzo bruto, a pedal de línea de código? ¿Por qué no una

integración virtual, configurable, con un software mediador que saque mayor

provecho en el front-end de lo que está construido en el back-end? Hacer esto

como un proyecto a medida es rígido y no escala: no tiene sentido crear una

malla de interconexiones entre distintas aplicaciones, y aplicaciones y repositorios de

información.

Transdisciplina: Se trata a menudo de esquemas cognitivos que pueden

atravesar las disciplinas, a veces con una furia tal que las coloca en dificultades.

Replicar información estará siempre en el catálogo de posibles métodos, pero hay

que tratar esto con cuidado para decidir correctamente cuando es la mejor

solución y cuando es un disparate. Filosóficamente no es un enfoque sostenible: no

se puede dar indefinidamente a la hora de consolidar y replicar porque

acabaremos replicando el planeta Tierra. El primer mandamiento en IT debería

ser “replico información (que ya está bien mantenida en donde sea) porque no

tengo una alternativa válida (cualquiera que sea la razón) de reutilización de esa

misma información”. No es ágil: replicar y consolidar obliga a sincronizar

contenidos, crea más “plumbing” a mantener, no se acomoda a un modelo

Page 61: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

46

incremental (sé lo que necesito consolidar hoy pero no necesariamente lo que voy

a necesitar mañana), no facilita la adaptación a cambios (nuevos clientes,

nuevos servicios, nuevas fuentes de información, cambios de procedimientos,

nueva organización, nuevos partners, etc.), ni la respuesta con datos actualizados. No

es una solución económica: no sólo montar la infraestructura de consolidación de la

información (normalmente proyectos largos), sino luego el operar y mantener la

nueva infraestructura. Los tiempos de “nueva aplicación”, demo Vs. otro nuevo data.

La Polidisciplina: Constituye una asociación de disciplinas en virtud de un

proyecto o de un objeto que le es común” Solución basada en ESB, BPM Los

buses de mensajes, las herramientas BPM, son sin duda una solución para

conseguir independencia entre el front-end y los back-end. Una pega importante:

costo en varias de sus expresiones (infraestructura, staff, tiempo, mantenimiento). Son

la solución idónea para cubrir necesidades transaccionales intensivas que requieren

sincronización dura, y con permanencia estable en el tiempo. Siempre habrá

escenarios que justifiquen la sincronización compleja de aplicaciones a nivel de

funcionalidad, de lógica de negocio, con acoplamiento estricto entre aplicaciones.

Pero por cada uno de estos proyectos, hay con seguridad diez veces más que

requieren una integración más ligera, que haga fácil la disponibilidad del dato,

de una manera ágil y atractiva en costo. Lo mismo con workflows que no son tanto

de automatización aplicación-aplicación, sino que son más una secuencia de

interacciones de usuario-aplicación (extracción de datos, rellenado de una orden o

formulario, transacción contra una aplicación, recoger el resultado y visualización de

nueva información en el terminal del empleado, etc.)

FUNDAMENTACIÓN PSICOLÓGICA

Page 62: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

47

La psicología, como todas las ciencias, es requerida para solucionar demandas

sociales, aunque muchas veces la petición se haga por un supuesto erróneo planteado

por grupos o personas ajenas a la disciplina que no tienen claro lo que la psicología

puede o no hacer. La aportación tecnológica que la psicología puede hacer es el

análisis, evaluación, modificación y predicción de la conducta en interrelación con los

factores ambientales en un contexto particular.

La ciencia no pretende reproducir los múltiples aspectos y transformaciones

propias de los eventos incluidos en su objeto de estudio, sino representar de una

manera simple y general, algunos de sus rasgos fundamentales. La tecnología

psicológica entonces se encargará de atender aquellas demandas sociales en las que se

identifique que el factor fundamental es el comportamiento examinando y orientando

las variables conocidas para probabilizar un tipo de interacción específica.

La tecnológica es el puente que la psicología, u otra ciencia crea para hacer llegar

a la sociedad su conocimiento y traducirlo en beneficios.

La pedagogía pragmática propone el desarrollo humano como un problema

experimental la cual es considerada como activa radical, toma como categoría rectora

a la acción como fin en sí misma a partir de analizar los resultados de los procesos

como evidencia de una acción anterior. La fuerza de este elemento central en la teoría

pedagógica pragmática adopta un valor utilitario siempre y cuando sea capaz de

mejorar las condiciones de vida de los seres humanos. No por gusto algunos

especialistas la catalogan como pedagogía del interés, puesto que centra su atención

en el provecho de los resultados sin importar los medios, lo que denota lo irracional y

vitalista de su sentido educativo. Es provechoso que el ser humano no piense ni

reflexione en sus acciones, sino simplemente que, cual máquina biológica pensante,

actúe en función de obtener los resultados deseados, tal vez en detrimento de los que

Page 63: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

48

le rodean.

FUNDAMENTACIÓN SOCIOLÓGICA

Oswald Campesato, Kevin Nilson (2011)Buscar tecnología se está convirtiendo mas en términosdiversos de herramientas de códigos abiertos que estándisponibles, las cuales son parte de la tecnología subyacentepara los mashup. ( 305 )

El termino sociedad de la información o sociedad del conocimiento es un término

que ha sido en general bien aceptado y hace referencia a un concepto de cambio o

ruptura con la etapa anterior denominada sociedad industrial.

El termino como tal si bien a nuestro punto de vista aparece como nuevo no lo es

tanto, ya que podemos encontrar sus orígenes en los años 70 y posteriormente en los

años 80, popularizado de la mano de autores con Daniel Bell, Jhon Naisbitt y Albin

Toffler.

La sociedad de la información transciende, va más allá del hecho informático o

tecnológico. En la sociedad de la información las tecnologías de la información y la

comunicación - TIC - se convierten en un instrumento clave para la comunicación, el

intercambio y la producción de información. A su vez, la información se convierte en

un factor a partir del cual se puede obtener conocimiento y es con este conocimiento

con el que se pueden producir, fabricar, bienes o servicios o proceder a relaciones de

intercambio de cualquier tipo y naturaleza.

En la sociedad de la información, el conocimiento se convierte en combustible y

la tecnología de la información y la comunicación en el motor. Las sociedades, sus

empresas, compiten gracias a que cuentan con los mejores conocimientos, y para ello,

para hacer fluido, transmisible y en consecuencia creciente en el conocimiento,

Page 64: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

49

necesitan de las tecnologías de la información. Es una especie de círculo virtuoso que

se alimenta a sí mismo.

No es fácil dar un concepto de sociedad de la información, máximo cuando

estamos convencidos de que el progreso de dicha sociedad depende, en buena

medida, del tipo de concepto que la misma se tenga y del tiempo que tarde en

asumirse y sentirse como propio el mismo por parte de los agentes que componen la

sociedad.

Está claro que entre la ciencia, la tecnología, y la sociedad existe una estrecha

relación. Y esta estrecha relación podría considerarse hoy en día como indestructible,

es decir, en nuestros tiempos la sociedad está tan ligada con estos dos señores que es

imposible de separarlos. No tanto imposible de separarlos, sino que serian muy

difícil de separar.

Por esta razón y como estos tres factores están ligados a la tecnología se realiza un

gran aporte a aporte a esta sociedad continuamente es por esto que se pensó realizar el

demo Mashup de Noticias basado en las Api de Twitter ya que brindara un gran

beneficio a la comunidad de la carrera de sistemas.

FUNDAMENTACIÓN PEDAGÓGICA

KANT (2005)

El esbozo de una teoría de la educación es un noble ideal, y

en nada nos perjudica aunque no estemos en capacidad de

realizarlo todavía, pues no se puede tomar por quimérica

una idea y despreciarla como un hermoso sueño porque se

nos presentan obstáculos para su realización. (328)

Page 65: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

50

Los aspectos tecnológicos de la Pedagogía remiten al intento de racionalidad como

criterio de la acción, y deben darle eficacia haciéndolo operativo: lograr que se

cumpla por el conocimiento, justo y evaluable de la forma de cumplirlo. Aquí la

racionalidad corresponde, pues a la acción guiada por diseños y planes.

Un aspecto básico de la citada interdependencia pedagógica ha de esclarecer las

relaciones entre el carácter objetivo con la ciencia y su horizonte social. Las

manifestaciones de la realidad a nivel científico dan conocimiento que permite

cambiarla a través de la determinación conceptual operativa, acorde con criterios de

índole cuantificadora y eficaz, propios para lograr la transformación de lo que está ahí

al comprenderlo tal cual es.

Hace falta que la tecnología pedagógica refiera y subordine su eficacia al

desarrollo según esta dimensión personal, promoviendo las condiciones precisas para

conseguirlo de las personas lejos de proponerse darles tan sólo configuración

socialmente prefijada, y reducir en ellos el poder de iniciativa a disposición para

secundarla desde la previa aceptación receptiva de los influjos.

FUNDAMENTACIÓN LEGAL

Según los artículos de la Ley de Propiedad Intelectual del Ecuador manifiestan lo

siguiente:

Art. 28. Los programas de ordenador se consideran obras

literarias y se protegen como tales. Dicha protección se otorga

Page 66: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

51

independientemente de que hayan sido incorporados en un

ordenador y cualquiera sea la forma en que estén expresados, ya

sea en forma legible por el hombre (código fuente) o en forma

legible por máquina (código objeto), ya sean programas

operativos y programas aplicativos, incluyendo diagramas de

flujo, planos, manuales de uso, y en general, aquellos elementos

que conformen la estructura, secuencia y organización del

programa.

Esto nos indica que todos los programas de ordenador serán protegidos según la ley

de propiedad de propiedad intelectual independientemente del tipo de estructura que

manejen estos programas de ordenador.

Art. 29. Es titular de un programa de ordenador, el productor,

esto es la persona natural o jurídica que toma la iniciativa y

responsabilidad de la realización de la obra. Se considerará

titular, salvo prueba en contrario, a la persona cuyo nombre

conste en la obra o sus copias de la forma usual.

Dicho titular está además legitimado para ejercer en nombre

propio los derechos morales sobre la obra, incluyendo la facultad

para decidir sobre su divulgación.

El productor tendrá el derecho exclusivo de realizar, autorizar o

prohibir la realización de modificaciones o versiones sucesivas del

programa, y de programas derivados del mismo.

Las disposiciones del presente artículo podrán ser modificadas

mediante acuerdo entre los autores y el productor.

Page 67: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

52

La persona que debidamente justifique la autoría del programa creado tendrá

todos los derechos de autor y además de las modificaciones que el pudiera efectuar

como autor del programa creado por dicha persona.

Art. 30. La adquisición de un ejemplar de un programa de

ordenador que haya circulado lícitamente, autoriza a su

propietario a realizar exclusivamente:

Una copia de la versión del programa legible por máquina (código

objeto) con fines de seguridad o resguardo;

Fijar el programa en la memoria interna del aparato, ya sea que

dicha fijación desaparezca o no al apagarlo, con el único fin y en

la medida necesaria para utilizar el programa; y,

Salvo prohibición expresa, adaptar el programa para su exclusivo

uso personal, siempre que se limite al uso normal previsto en la

licencia. El adquirente no podrá transferir a ningún título el

soporte que contenga el programa así adaptado, ni podrá

utilizarlo de ninguna otra forma sin autorización expresa, según

las reglas generales.

Se requerirá de autorización del titular de los derechos para

cualquier otra utilización, inclusive la reproducción para fines de

uso personal o el aprovechamiento del programa por varias

personas, a través de redes u otros sistemas análogos, conocidos o

por conocerse.

Cualquier persona que adquiera un tipo de programa que servirá como parte de

los utilitarios de su computadora y mientras lo adquiera de manera legal tendrá

Page 68: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

53

derecho de realizar algún tipo de copia con la única finalidad de obtener un tipo de

respaldo referente al programa que se ha adquirido, si la persona quisiera darle algún

otro tipo de uso a este programa deberá tener la debida autorización del autor del

mismo para darle el uso que la persona desee.

Art. 31. No se considerará que exista arrendamiento de un programa de

ordenador cuando éste no sea el objeto esencial de dicho contrato. Se

considerará que el programa es el objeto esencial cuando la funcionalidad

del objeto materia del contrato, dependa directamente del programa de

ordenador suministrado con dicho objeto; como cuando se arrienda un

ordenador con programas de ordenador instalados previamente.

Esto implica que los términos de un contrato de arrendamiento de programa deben

estar debidamente especificados para que no exista ningún tipo de inconveniente a

futuro.

PREGUNTAS A CONTESTARTE

¿Qué es el Mashup?

¿Cuál es el beneficio que aporta a la sociedad el Mashup de Noticias basado en las

Api de Twitter?

¿Cómo ha influido la tecnología en la evolución de los Mashup ?

Page 69: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

54

¿Cual es la arquitectura básica para la creación de un Mashup?

¿Cuáles son los principales tipos de Mashup que existen?

¿Cuál es el beneficio de utilizar Joomla en los mashup?

¿Qué aporte brinda el proyecto INVESTIGACIÓN DE APLICACIÓN MASHUP

PARA NOTICIAS BASADO EN LAS API DE TWITTER a la comunidad de

ingeniería en sistemas computacionales?

VARIABLES DE LA INVESTIGACIÓN

Variable Independiente

Aplicación Mashup: Es un sitio Web o aplicación Web hibrida que usa contenido de

otras aplicaciones Web para crear un nuevo contenido completo, consumiendo

servicios directamente siempre a través de protocolo http.

Variable Dependiente

Api de Twitter: Es el enlace que tendrá la Aplicación Web para conectarse a Twitter a

través de este sitio Web.

Aplicación demo de Mashups: Aplicación web que aportara grandes beneficios a la

Page 70: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

55

comunidad de los estudiantes de la carrera de sistemas.

Comunidad académica de la carrera de ingeniería de sistemas computacionales:

Análisis del comportamiento de lo que los estudiantes necesitan para que sirva de

aporta y contribuya a la comunidad estudiantil de los estudiantes de la carrera de

ingeniería en sistemas computacionales.

GLOSARIO DE TÉRMINOS

Ad Hoc: En redes de comunicación es una red especialmente inalámbrica en la que

no hay un nodo central, sino que todos los dispositivos están en igualdad de

condiciones.

API: Una interfaz de programación de aplicaciones o API (del inglés application

programming interface) es el conjunto de funciones y procedimientos (o métodos, en

la programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por

otro software como una capa de abstracción. Usados generalmente en las bibliotecas.

ATOM: Es una familia de microprocesadores de bajo consumo fabricados por Intel.

El formato de redifusión Atom, alternativa a RSS

El computador casero Acorn Atom.

Back Office: Es la parte de las empresas donde tienen lugar las tareas destinadas a

gestionar la propia empresa y con las cuales el cliente no necesita contacto directo.

Blog: Un blog, o en español también una bitácora, es un sitio web periódicamente

actualizado que recopila cronológicamente textos o artículos de uno o varios autores,

Page 71: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

56

apareciendo primero el más reciente, donde el autor conserva siempre la libertad de

dejar publicado lo que crea pertinente. El nombre bitácora está basado en los

cuadernos de bitácora, cuadernos de viaje que se utilizaban en los barcos para relatar

el desarrollo del viaje y que se guardaban en la bitácora. Aunque el nombre se ha

popularizado en los últimos años a raíz de su utilización en diferentes ámbitos, el

cuaderno de trabajo o bitácora ha sido utilizado desde siempre.

BPM: (Business Process Management), o BPMS (BPM Suite) es el conjunto de

servicios y herramientas que facilitan la administración de procesos de negocio. Por

administración de procesos entendemos: análisis, definición, ejecución, monitoreo, y

control de los procesos.

BPM además contempla soporte para interacción humana, e integración de

aplicaciones, y es aquí la diferencia fundamental con la tecnología de WorkFlow

existente, que es que BPM integra en los flujos a los sistemas

CMS: Un sistema de gestión de contenidos (en inglés Content Management System,

abreviado CMS) es un programa que permite crear una estructura de soporte

(framework) para la creación y administración de contenidos, principalmente en

páginas web, por parte de los participantes.

Consiste en una interfaz que controla una o varias bases de datos donde se aloja el

contenido del sitio. El sistema permite manejar de manera independiente el contenido

y el diseño. Así, es posible manejar el contenido y darle en cualquier momento un

diseño distinto al sitio sin tener que darle formato al contenido de nuevo, además de

permitir la fácil y controlada publicación en el sitio a varios editores.

CRM: Customer Relationship Management. se entiende como la Gestión sobre la

Relación con los Consumidores.

Page 72: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

57

CSS: Es una tecnología que nos permite crear páginas web de una manera más

exacta. Gracias a las CSS somos mucho más dueños de los resultados finales de la

página, pudiendo hacer muchas cosas que no se podía hacer utilizando solamente

HTML, como incluir márgenes, tipos de letra, fondos, colores.

CSS son las siglas de Cascading Style Sheets, en español Hojas de estilo en Cascada.

EMOTE.IN: Es un sitio de microblogging en donde el principal objetivo es escribir

las emociones y los sentimientos. Es como si se tratara de una versión de Twitter

hecha especialmente para las personas “emotivas”, o para quienes pretenden usar el

concepto de microblog como una extensión de su diario, con cosas más personales

ESB: Enterprise service bus, arquitectura software usada en informática.

Feed: Es un medio de redifusión de contenido web. Se utiliza para suministrar

información actualizada frecuentemente a sus suscriptores

Front-end: Es la parte del software que interactúa con el o los usuarios y el back-end

es la parte que procesa la entrada desde el front-end.

Google Maps: Es el nombre de un servicio gratuito de Google. Es un servidor de

aplicaciones de mapas en la Web. Ofrece imágenes de mapas desplazables, así como

fotos satelitales del mundo entero e incluso la ruta entre diferentes ubicaciones o

imágenes a pie de calle Street View. Desde el 6 de octubre del 2005, Google Maps es

parte de Google Local.

HTML: Siglas de HyperText Markup Language (lenguaje de marcado de hipertexto),

es el lenguaje de marcado predominante para la elaboración de páginas web. Es usado

para describir la estructura y el contenido en forma de texto, así como para

Page 73: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

58

complementar el texto con objetos tales como imágenes. HTML se escribe en forma

de «etiquetas», rodeadas por corchetes angulares (<,>). HTML también puede

describir, hasta un cierto punto, la apariencia de un documento, y puede incluir un

script (por ejemplo JavaScript), el cual puede afectar el comportamiento de

navegadores web y otros procesadores de HTML.

HTTP: Hypertext Transfer Protocol o HTTP (en español protocolo de transferencia

de hipertexto) es el protocolo usado en cada transacción de la World Wide Web.

Interfaz: Es la conexión entre dos ordenadores o máquinas de cualquier tipo dando

una comunicación entre ambas.

Jaiku: Es un servicio de redes sociales y microblogging que permite a sus usuarios

enviar mensajes de sólo texto, con una longitud máxima de 140 caracteres, mensajería

instantánea, el sitio web de Jaiku o aplicaciones ad hoc. Antes se podía realizar vía

SMS pero fue descontinuado por los elevados costos que significaba para la empresa.

Javascript: Es un lenguaje de scripting basado en objetos no tipeado y liviano,

utilizado para acceder a objetos en aplicaciones. Principalmente, se utiliza integrado

en un navegador web permitiendo el desarrollo de interfaces de usuario mejoradas y

páginas web dinámicas.

Joomla: Es un sistema de gestión de contenidos y entre sus principales virtudes está

la de permitir editar el contenido de un sitio web de manera sencilla. Es una

aplicación de código abierto programada mayoritariamente en PHP bajo una licencia

GPL (General Public License), es uno de los mejores sistemas gestores de contenido

web de código abierto.

JSON: JavaScript Object Notación - Notación de Objetos de JavaScript es un

formato ligero de intercambio de datos. Leerlo y escribirlo es simple para humanos,

Page 74: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

59

mientras que para las máquinas es simple interpretarlo y generarlo.

Metadatos: es datos acerca de datos, de cualquier tipo y medio. Son datos que

describen otros datos. El metadato puede ser texto, voz o imagen. El metadato ayuda

a clarificar y encontrar datos.

Microblogging: Es también conocido como nanoblogging, el cual es un servicio que

permite a sus usuarios enviar y publicar mensajes breves (alrededor de 140

caracteres), generalmente sólo de texto. Las opciones para el envío de los mensajes

varían desde sitios web, a través de SMS mensajería instantánea o aplicaciones ad

hoc.

Moodle: Es un Ambiente Educativo Virtual, sistema de gestión de cursos, de

distribución libre, que ayuda a los educadores a crear comunidades de aprendizaje en

línea. Este tipo de plataformas tecnológicas también se conoce como LMS (Learning

Management System).

OAuth:Un protocolo abierto para permitir obtener la autorización de la API en un

método simple y estándar de aplicaciones de escritorio y web.

Outsourcing: Es el proceso económico en el cual una empresa determinada mueve o

destina los recursos orientados a cumplir ciertas tareas, a una empresa externa, por

medio de un contrato.

Paradigma: El paradigma se define desde la epistemología, la ciencia del

conocimiento, como aquel gran conjunto de creencias que permiten ver y comprender

la realidad de determinada manera. Dichas creencias incluyen también ciertas

preconcepciones y creencias filosóficas, que en un determinado momento comparte la

comunidad científica. Como es posible intuir, los paradigmas se encuentran en

constante cambio, cambios que guarda relación con los avances y descubrimientos

Page 75: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

60

científicos que abren nuevas perspectivas y horizontes

PHP: Es un lenguaje de programación interpretado, diseñado originalmente para la

creación de páginas web dinámicas.

Perl: Es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma

características del lenguaje C, del lenguaje interpretado shell (sh), AWK, sed, Lisp y,

en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y

fue ampliamente adoptado por su destreza en el procesador de texto y no tener

ninguna de las limitaciones de los otros lenguajes de script.

Pipes: es una herramienta de composición poderosa para agregar, manipular el

contenido de todo el mashup web.

Plug-in: Conector. Pequeño programa que añade alguna función a otro programa,

habitualmente de mayor tamaño. Un programa puede tener uno o más conectores. Son

muy utilizados en los programas navegadores para ampliar sus funcionalidades.

Plurk: Es una red social o Microblogging con una gran aceptación a nivel mundial, la

palabra Plurk si tiene un significado que son las siglas en ingles de Paz, Amor,

Unidad, Respeto, Karma (Peace, Love, Unity, Respect, Karma) otra curiosidad es que

Plurk arranca con soporte de nueve idiomas.

REST: Representational State Transfer (Transferencia de Estado Representacional)

Es una técnica de arquitectura software para sistemas hipermedia distribuidos como la

World Wide Web.

RIA: son un nuevo tipo de aplicaciones con más ventajas que las tradicionales

Page 76: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

61

aplicaciones Web. Esta surge como una combinación de las ventajas que ofrecen las

aplicaciones Web y las aplicaciones tradicionales.

RSS: son las siglas de RDF Site Summary or Rich Site Summary , un formato XML

para sindicar o compartir contenido en la web. Se utiliza para difundir información

actualizada frecuentemente a usuarios que se han suscrito a la fuente de contenidos.

Screen Scraping: es el nombre en inglés de una técnica de programación que

consiste en tomar una presentación de una información (normalmente texto, aunque

puede incluir información gráfica) para, mediante ingeniería inversa, extraer los datos

que dieron lugar a esa presentación.

SSL: Secure Sockets Layers es un protocolo de seguridad de las comunicaciones de

red que permite la autentificación de servidores, la codificación de datos y la

integridad de los mensajes.

SOA: La arquitectura orientada a servicios de cliente (en inglés Service Oriented

Architecture), es un concepto de arquitectura de software que define la utilización de

servicios para dar soporte a los requisitos del negocio.

Permite la creación de sistemas de información altamente escalables que reflejan el

negocio de la organización, a su vez brinda una forma bien definida de exposición e

invocación de servicios (comúnmente pero no exclusivamente servicios web), lo cual

facilita la interacción entre diferentes sistemas propios o de terceros.

SOA proporciona una metodología y un marco de trabajo para documentar las

capacidades de negocio y puede dar soporte a las actividades de integración y

consolidación.

SOAP: Es un protocolo estándar que define cómo dos objetos en diferentes procesos

pueden comunicarse por medio de intercambio de datos XML sus siglas son las

Page 77: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

62

siguientes Simple Object Access Protocol.

Tweet: Es una publicación o una actualización de tu estado en Twitter. La palabra

Tweet proviene del sonido que emiten los pájaros, para los que no lo saben el nombre

de Twitter significa parlotear (la forma en cómo se comunican los pajaros).

Es por eso que Tweet es el sonido que hacen los pájaros, y si lo comparamos con el de

los humanos, entonces Tweet sería lo que conversamos o publicamos en nuestro

estado de Twitter.

Twittear: Dícese de la acción de mandar mensajes en Twitter.

Tumblr: Es una plataforma de microblogging que permite a sus usuarios publicar

textos, imágenes, vídeos, enlaces, citas y audio a manera de tumblelog. Los usuarios

pueden «seguir» (follow) a otros usuarios registrados y ver las entradas de éstos

conjuntamente con las suyas, por lo cual Tumblr puede ser considerado una

herramienta social.

El servicio enfatiza la facilidad de uso y personalización. Tumblr fue fundado por

David Krap en el año 2007.

UML: Lenguaje Unificado de Modelado (LUM o UML, por sus siglas en inglés,

Unified Modeling Language) es el lenguaje de modelado de sistemas de software más

conocido y utilizado en la actualidad; está respaldado por el OMG (Object

Management Group). Es un lenguaje gráfico para visualizar, especificar, construir y

documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema

(modelo), incluyendo aspectos conceptuales tales como procesos de negocio,

funciones del sistema, y aspectos concretos como expresiones de lenguajes de

programación, esquemas de bases de datos y componentes reutilizables.

Page 78: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

63

Es importante resaltar que UML es un "lenguaje de modelado" para especificar o para

describir métodos o procesos. Se utiliza para definir un sistema, para detallar los

artefactos en el sistema y para documentar y construir. En otras palabras, es el

lenguaje en el que está descrito el modelo.

Se puede aplicar en el desarrollo de software entregando gran variedad de formas

para dar soporte a una metodología de desarrollo de software (tal como el Proceso

Unificado Racional o RUP), pero no especifica en sí mismo qué metodología o

proceso usar.

Upgrade: Nombre en inglés que reciben las nuevas versiones de una aplicación o un

hardware y son diseñadas para reemplazar una versión previa del mismo producto.

Weblog: es un sitio web periódicamente actualizado que recopila cronológicamente

textos o artículos de uno o varios autores, apareciendo primero el más reciente, donde

el autor conserva siempre la libertad de dejar publicado lo que crea pertinente.

Web Browser: Es un programa que permite visualizar la información que contiene

una página web (ya se encuentre ésta alojada en un servidor dentro de la World Wide

Web o en un servidor local).

Widgets: Es una pequeña aplicación o programa, usualmente presentado en archivos

o ficheros pequeños que son ejecutados por un motor de widgets o Widget Engine.

Entre sus objetivos están los de dar fácil acceso a funciones frecuentemente usadas y

proveer de información visual.

Wikimapia: Es un recurso en línea que combina los mapas del buscador Google con

un sistema wiki, permitiendo a los usuarios añadir información en forma de notas a

cualquier región o localidad del planeta.

Page 79: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

64

Windows Live: Es el nombre de un conjunto de servicios y productos de software de

Microsoft, parte de su plataforma de software más servicios. La mayoría de estas

aplicaciones web son accesibles desde un navegador, pero también hay aplicaciones

binarias que necesitan ser instaladas en el PC del usuario. Windows Live ofrece sus

servicios de tres maneras: aplicaciones de Windows Live Essentials, servicios web y

servicios móviles

WSDL: Son las siglas de Web Services Description Language, un formato XML que

se utiliza para describir servicios Web (algunas personas lo leen como wisdel)

XML: Extensible Markup Language es un conjunto de reglas para la codificación de

documentos en forma legible por máquina.

YouTube: Es un sitio web en el cual los usuarios pueden subir y compartir vídeos.

Fue creado por tres antiguos empleados de PayPal en febrero de 2005. En noviembre

de 2006 Google Inc. lo adquirió por 1650 millones de dólares, y ahora opera como

una de sus filiales.

YouTube usa un reproductor en línea basado en Adobe Flash para servir su contenido.

Es muy popular gracias a la posibilidad de alojar vídeos personales de manera

sencilla. Aloja una variedad de clips de películas, programas de televisión, vídeos

musicales, a pesar de las reglas de YouTube contra subir vídeos con derechos de

autor, este material existe en abundancia, así como contenidos amateur como

videoblogs. Los enlaces a vídeos de YouTube pueden ser también puestos en blogs y

sitios electrónicos personales usando API o incrustando cierto código HTML.

Page 80: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

65

CAPÍTULO III

METODOLOGÍA

DISEÑO DE LA INVESTIGACIÓN

MODALIDAD DE LA INVESTIGACIÓN

La metodología es el instrumento que enlaza el sujeto con el objeto de la

investigación, Sin la metodología es casi imposible llegar a la lógica que conduce al

conocimiento científico.

La metodología se ocupa de la parte operatoria ya que en ella están incluidos los

métodos y técnicas que son herramientas que intervienen en la investigación de

campo.

Investigación de campo: Se trata de la investigación aplicada para comprender y

Page 81: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

66

resolver alguna situación, necesidad o problema en un contexto determinado. El

investigador trabaja en el ambiente natural en que conviven las personas y las fuentes

consultadas, de las que obtendrán los datos más relevantes a ser analizados, son

individuos, grupos y representaciones de las organizaciones científicas no

experimentales dirigidas a descubrir relaciones e interacciones entre variables

sociológicas, psicológicas y educativas en estructuras sociales reales y cotidianas.

Investigación Bibliográfica: La investigación bibliográfica es aquella etapa de la

investigación científica donde se explora qué se ha escrito en la comunidad científica

sobre un determinado tema o problema.

Proyecto Factible: Es el que permite la elaboración de una propuesta de un

modelo operativo viable, o una solución posible, cuyo propósito es satisfacer una

necesidad o solucionar un problema.

TIPOS DE INVESTIGACIÓN

Los tipos de investigación que existen son:

Investigación Exploratoria

Es aquella que se efectúa sobre un tema u objeto desconocido o poco estudiado, por

lo que sus resultados constituyen una visión aproximada de dicho objeto, es decir, un

nivel superficial de conocimiento.

Investigación Descriptiva

La investigación descriptiva, también conocida como la investigación estadística,

describe los datos y características de la población o fenómeno en estudio.

Investigación Explicativa

Page 82: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

67

La investigación explicativa intenta dar cuenta de un aspecto de la realidad,

explicando su importancia dentro de una teoría de referencia, a la luz de leyes o

generalizaciones que dan cuenta de hechos o fenómenos que se producen en

determinadas condiciones.

Investigación Evaluativa

La investigación evaluativa se limita a la recolección de información específica con

validez temporal. No siempre puede basarse en metodologías rigurosas de

investigación, debido a que los problemas educacionales, por su complejidad y

urgencia, no pueden manejarse completamente, mediante esquemas convencionales.

Esta experiencia incluyó el análisis de datos cuantitativos obtenidos a través de

instrumentos cuidadosamente elaborados, para asegurar la validez y confiabilidad de

los resultados; así como procesos indagatorios más informales, particularmente en la

observación.

El modelo que se usara será la investigación exploratoria para la

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN

LAS API DE TWITTER ya que es la más óptima porque para llegar a la elección de

este tema se realizo un estudio de campo de manera específica en los estudiantes de

los últimos semestres de la carrera de ingeniería en sistemas referente al entorno web.

La investigación exploratoria es aquella en la que se intenta obtener una

familiarización con un tema del que se tiene un conocimiento general, para plantear

posteriores investigaciones u obtener hipótesis. Los ejemplos de este tipo de

aplicación son las investigaciones en las que se pretender conocer el lenguaje de un

determinado público para elaborar un cuestionario con el que pueda realizar una

encuesta. También se pueden citar investigaciones en las que se percibe recabar

información con la que formular hipótesis generales.

Por medio de métodos investigativos en cuantos a los temas que tienen más

Page 83: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

68

captación de usuarios con respecto a nivel tecnológico, se pudo saber que la gente

dedica al menos unos cuantos minutos a ingresar al internet; es así que por esta razón

se llego a la conclusión de realizar algo que sea de entorno web.

Una vez que se sabía que se trabajara en un entorno web y en el campo especifico

de investigación, se procedería a la elección de un tema referente a este entorno por el

cual se escogió el método de las encuestas el cual nos permitirá conocer que tanto

saben o desconocen del tema al cual se está tratando.

Se escogió realizar una página web informativa debido a que por el ritmo de vida

que tienen las personas, tenían un alto índice en cuanto al conocimiento de noticias y

lo poco que sabían es a través de terceras personas que lo informaban contándole

estas noticias y como es de conocimiento público todas las personas al menos

ingresamos un lapso de 15 minutos o mas o en el Internet diariamente será un buena

estrategia para que ellos puedan estar actualizados en las noticias ingresando en esta

página web.

Tomando en cuenta que todo se maneja en la actualidad a través de las redes

sociales la página web informativa contara con los diferentes iconos de las redes

sociales para que puedan acceder a las mismas y así estén conectados con sus páginas

sociales como en la página web informativa.

Todas estas opciones que se describen serán capaz de hacerse realidad y plasmarse

en esta página informativa a través de los diferentes métodos investigativos que

existen como son consulta de libros, búsqueda de temas en Internet los cuales serán:

Joomla como herramienta de diseño web lo cual permitirá que el usuario pueda

observar el producto de una forma más llamativa y novedosa con la finalidad de que

este quiera ingresar nuevamente a la pagina informativa tanto para enriquecerse en el

entorno informativo como también para poder usar las diferentes opciones y

beneficios que contara en este sitio web.

Page 84: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

69

POBLACIÓN Y MUESTRA

Población

Una población se precisa como un conjunto finito o infinito de personas u objetos

que presentan características comunes.

También se entiende por población a la totalidad del universo que interesa

considerar, y que es necesario que esté bien definido para que se sepa en todo

momento que elementos lo componen.

No obstante, cuando se realiza un trabajo puntual, conviene distinguir entrepoblación teórica: conjunto de elementos a los cuales se quieren extrapolar losresultados, y población estudiada: conjunto de elementos accesibles en nuestroestudio.

En este caso la población estará conformada por las personas de la carrera de ingeniería en

sistemas de la facultad de Ciencias Físicas y Matemáticas, la cual estuvo constituida por 1

director, 21 docentes y 250 estudiantes los cuales pertenecen a los dos últimos semestres de la

carrera de sistemas.

Se escogió a los dos últimos semestres de la carrera de sistemas puesto que tienen

más capacidad profesional para responder a la encuesta y entenderán mejor de que se

trata el proyecto.

El total se debe a cursos completos que fueron tomados para realizar este proyecto

los cuales fueron dos cursos de 7mo y dos cursos de 8vo semestre ahí están los 62 a

63 alumnos por curso el cual da el total de la población que es de 250 y de la misma

Page 85: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

70

forma se escogió la población de los docentes.

Cuadro No. 1 Población

ESTRATOS POBLACIÓNDirector 1

Docentes 24

Estudiantes 250

Total 275Fuente: Carrera de Ingeniería en Sistemas Computacionales

Docentes y Alumnos de Séptimo y Octavo Semestre.

Elaborado por: Araceli Dávila Macías

Muestra

La muestra es una herramienta de la investigación científica. Su función básica

debe ser definida en base de la población determinada, y las conclusiones que se

obtengan de dicha muestra solo podrán referirse a la población en referencia.

Este técnica será usada con la única finalidad de obtener información acerca del

tema al cual se está investigando; por este motivo las encuestas permitirán tener

resultados y sacar las conclusiones acerca de los datos obtenidos en las mimas.

Una encuesta es solo uno de los métodos posible de estudio de la realidad, que

muestra los resultados de forma directa.

La fórmula que se usara para determinar la muestra es la siguiente:

PQ= Constante de población (0.25)

N= Tamaño de la población (275)

E= Error admisible (0.05)

PQKEN

NPQn

22 /*)1(

*

Page 86: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

71

K= Coeficiente de error (2)

Tamaño de Muestra según la fórmula:

25.04/0025.0*274

275*25.0

n = 163

Cuadro No. 2 Muestra

ESTRATOS MUESTRA

Director 1

Docentes 12

Estudiantes 150

Total 163

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Docentes y Alumnos de Séptimo y Octavo Semestre.

Elaborado por: Araceli Dávila Macías

OPERACIONALIZACIÓN DE VARIABLES

Variable Dependiente

Investigación De Aplicación Mashups

Variable Independiente

Page 87: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

72

Api De Twitter

Propuesta De Un Demo

Comunidad Académica De La Carrera De Ingenieria En Sistemas Computacionales

Cuadro No. 3 Matriz de Operacionalización de Variables

Variables Dimensiones Indicadores Técnicas y/o

Instrumentos

V. I.

Investigación de

Aplicación

Mashup

Evaluación:

Observación

de los diferentes tipos

de Mashup que

existen en el mercado

El proveedor de

contenidos: están

disponibles con una

API y diferentes

protocolos web como

RSS.

Textos relacionados

con el tema.

Actividades acorde a

cada ítem.

Información:

Indagación sobre cada

elemento que

conforme el Mashup

de Noticias.

El sitio mashup: es la

nueva aplicación web

que provee un nuevo

servicio utilizando

diferente

información

Consultas a través de

la web referente al

tema Mashup de

Noticias

V.D.

Api de Twitter

Investigar acerca de

las Api de Twitter

Obtener los

componentes que

harán posible al

ingreso del Twitter

por medio de sitio

web

Textos exclusivos de

las Api de Twitter.

Buscar en los motores

de búsqueda todo lo

relacionado acerca de

este tema.

Page 88: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

73

Investigar acerca de

Joomla y como añadir

el Api de Twitter en

sus componentes

A través del sitio web

se podrá visualizar

todas las

características con

respecto al Twitter

que se podrá

visualizar

Manuales acerca de

Joomla y su

funcionamiento.

Textos referentes a

los temas expuestos

V.D.

Propuesta de un

demo

Estudio de lo

investigado para

obtener un gran

beneficio para brindar

a la sociedad.

Combinar

información de

motores de

búsqueda, servicios

web, y soluciones de

integración de datos

Bibliografía

especializada,

consulta a expertos

Análisis referente al

esquema del sitio web

Coleccionar datos y

servicios de

diferentes orígenes

mezclándolo en una

interfaz gráfica

Observación,

encuestas.

V.D.

Comunidad

Académica de la

carrera de

ingeniería en

sistemas

computacionales

Investigar las

necesidades de los

estudiantes de la

carrera de ingeniería

en sistemas

computacionales

Obtener la mayor

información acerca

d de los temas que

sugieran con la

finalidad de brindar

beneficios óptimos

a esta comunidad

estudiantil

Encuestas

Page 89: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

74

Consultar a los

docentes sobre

posibles temas que

ellos piensen que le

sirvan tanto a ellos

como a los estudiantes

de la carrera de

sistemas

Recolectando

información

ingresando a los

cursos para que

expongan sus

opiniones

Buzón de sugerencias

acerca de temas

tecnológicos que

brinden beneficios a

la comunidad de

carrera de sistemas

Elaborador por: Araceli Dávila M. Fuente: Araceli Dávila Macías

INSTRUMENTOS DE RECOLECCIÓN DE DATOS

RESPUESTAS A LAS PREGUNTAS

¿Qué es el Mashup?

Mashup es una palabra que proviene de un término musical en inglés, que

significa la creación de una nueva canción a partir de la mezcla o pedazos de otras

canciones, desde este concepto se basa el mashup de software.

Es una web o una aplicación web que de forma transparente combina contenidos

de más de una fuente de un modo integrado.

¿Cuál es el beneficio que aporta a la sociedad el Mashup de Noticias basado en

las Api de Twitter ?

Facilita la combinación de una manera sencilla pero visualmente muy atractiva y

eficaz de multitud de datos que existen en la actualidad en Internet”. Además en estos

Page 90: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

75

momentos se está utilizando “tanto para usos públicos como privados en multitud de

combinaciones que facilitan, ordenan y presentan la información de una manera muy

innovadora”. Aunque las empresas obtienen grandes beneficios con la aplicación de

mashups.

Los usuarios “son los principales beneficiarios de estas potentes herramientas que

se están creando en torno a la Red, ya que ellos mismos pueden ser los creadores de

estos servicios, a la vez que usuarios de cientos de aplicaciones”.

¿Cómo ha influido la tecnología en la evolución de los Mashup?

La tecnología siempre aporta en grandes beneficios ya que como se conoce los

mashusp comenzaron con mezclas de pistas musicales y han ido creciendo con el

tiempo gracias a los aportes tecnológicos tanto a nivel investigativo como a nivel de

programación o códigos fuentes ya que estos simplifican de gran manera las tareas

que anteriormente se las lograba de forma más compleja y tomaban días o meses en

realizarlas.

En la actualidad es de gran a nivel empresarial y de manera general a la sociedad

gracias a la evolución de la tecnología.

¿Cuál es la arquitectura básica para la creación de un Mashup?

La arquitectura de los mashups está siempre compuesta de tres partes:

El proveedor de contenidos: fuente de los datos. Los datos están disponibles

vía una API y diferentes protocolos web como RSS, REST y Web Service.

Page 91: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

76

El sitio mashup: es la nueva aplicación web que provee un nuevo servicio

utilizando diferente información y de la que no es dueña.

El web browser cliente: es la interface de usuario del mashup. En una

aplicación web, el contenido puede ser mezclado por los web browser clientes

usando lenguaje web del lado del cliente. Por ejemplo javascript.

¿Cuáles son los principales tipos de Mashup que existen?

Son:

Mashups de Mapas: Muestran información sobre un mapa o imagen satélite.

Mashups de Foto y Video: Son APIS para acceder a grandes bases de datos

de videos y fotos ya sean contenidos creados por el usuario o por expertos en

el tema.

Mashups de Compras: Son comercios on-line donde los usuarios realizan

una búsqueda de mejores ofertas para los productos que se comercializan por

la via web.

Mashups de Noticias: Son noticias agrupadas según preferencias del usuario.

¿Cuál es el beneficio de utilizar Joomla en los mashup?

El beneficio de utilizar Joomla en los mashup son los siguientes:

Page 92: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

77

Al ser Joomla un gestor de contenido tiene múltiples opciones para realizar

diseños, posibilidad de modificar los códigos ya que permite visualizar todos

los códigos fuentes y adaptarlos a las necesidades de cada persona que esté

realizando su sitio web.

Mashup como recopila datos de diversas páginas y las junta de tal manera que

todo esto se pueda visualizar en un solo sitio web, el aporte de Joomla para

realizar un sitio web de esta magnitud es de gran importancia ya que

constantemente gracias a este gestor de contenido podrá modificar y mejorar

este sitio y algo que se puede destacar es que no se necesita ser un experto

programador para manejar joomla.

¿Que aporte brinda el proyecto INVESTIGACIÓN DE APLICACIÓN

MASHUP PARA NOTICIAS BASADO EN LAS API DE TWITTER a la

comunidad de ingeniería en sistemas?

Este proyecto aporta un principal beneficio a la comunidad de sistemas que es la

lectura de una manera didáctica ya que a través del sitio www.mantentealdia.net,

podrán estar informados con las noticias on – line, además de estar conectado a las

redes sociales y contar con un chat interactivo para que así toda esta gran comunidad

de sistemas se encuentren actualizados y en contacto de todas lo que pasa tanto en el

sitio web como en esta comunidad.

Con esto se fomenta a la lectura y se da a la comunidad de sistemas un gran mensaje

ya que a través de la lectura todos podemos comunicarnos y estar enterados de lo que

Page 93: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

78

pasa, siendo esto de gran utilidad ya sea en nuestra vida laboral, profesional o familiar

debido a que nos enriquece y adquirimos más conocimientos de los temas en los

cuales estemos interesados en leer.

INSTRUMENTOS DE LA INVESTIGACIÓN

Observación

La observación es un proceso mediante en el cual aplicaremos atentamente

nuestros sentidos para conocer y comprobar las propiedades y relaciones internas de

un fenómeno, sin alterar nada de ese fenómeno, pues la observación es una

contemplación viva de la realidad.

Existen dos tipos de observación las cuales son: Observación Simple y Participante

Estos tipos de observación se los utiliza como referencia ya que el tema de tesis usara

como tipo de observación a la Observación Participante.

Page 94: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

79

Observación Participante: La observación es participante cuando para

obtener los datos el investigador se incluye en el grupo, hecho o fenómeno

observado, para conseguir la información "desde adentro".

La observación participante permite describir la realidad social, las

percepciones y vivencias de las personas implicadas y el significado de sus

acciones, por lo que pensamos que es apropiada para la realización de nuestra

investigación.

Encuesta

La encuesta está conformada de un grupo de preguntas que se dirigen a un

segmento de personas específicas que nos permitirán conocer sus opiniones,

inquietudes, gustos y preferencias entre otras cosas.

La encuesta por lo regular se encuentra conformada de preguntas cerradas con

respuestas de opción múltiple que nos permitirán contabilizar los resultados de

manera más oportuna.

Cuando se han se han concretado los conceptos de los tipos de investigación

podemos puntualizar otras cuestiones importantes que se obtuvieron para llegar a

realizar este tema de tesis que aportara a la sociedad brindándoles grandes beneficios

a la misma.

Por estas razones se hicieron varias investigaciones aparte de la encuesta fija que se

les realizo a los estudiantes para definir el tema, como algo fundamental y primordial

Page 95: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

80

se hizo una encuesta sobre la tendencia que tienen tanto los hombres y mujeres entre

ver la televisión o ingresar al internet; ganando con un gran nivel nivel porcentual el

internet debido a diversas razones.

Sabiendo esto se obtiene que es factible la realización de una página web en

internet, ahora para definir de que se realizara esta página se debería buscarse algo

novedoso que no esté en el internet y que aporte a la sociedad, ganando a través de los

sitios web visitados la información realizando entonces una Página Web llamada

Mashup para noticias basado en la Api de Twitter.

Con este demo de pagina web informativa se obtendrá varios beneficios para los

usuarios como es que ellos interactúen con las redes sociales se mantengan

informados, publicidad para las empresas de manera gratuita brindando un gran

aporte tanto a nivel tecnológico como a nivel de la sociedad.

Page 96: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

81

LA ENCUESTA

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS

CARRERA DE INGENIERIA EN SISTEMAS COMPUTACIONALES ENCUESTA

DIRIGA A DIRECTOR Y DOCENTES DE LA CARRERA DE INGENIERIA EN

SISTEMAS COMPUTACIONALES

OBJETIVOS

Obtener información sobre las tendencias de los medios de comunicación en

cuanto su nivel de aceptación en este caso en la comparación se evalúa la

televisión con el Internet.

Medir el nivel de conocimiento en las personas sobre el mantenerse informado

y cuanto tiempo están en Internet específicamente en las redes sociales.

Conocer cuánta acogida tiene el Internet y en que niveles tiene más afluencia

de visitas en este mundo cibernético con los usuarios.

INSTRUCTIVO:

Page 97: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

82

Lea detenidamente cada una de las preguntas conteste con mucha seriedad y

responsabilidad si gusta firme y si no, no se preocupe.

N° ALTERNATIVA

3 De Acuerdo ( D. A)

2 Indiferente ( I )

1 En desacuerdo ( E. D.)

ENCUESTA DIRIGA A DIRECTOR Y DOCENTES DE LA CISC

N° ENCUESTA SOBRE MASHUP DE NOTICIAS

BASADO EN LA API DE TWITTER D

A

I E

D1 ¿Considera Ud. Que la sociedad debe estar informada

de lo que sucede en su entorno a nivel informativo?2 ¿Cree Ud. Que la tecnología aporta a la sociedad?

3

¿Cree Ud. que una página web que agrupe varias

noticias (MASHUP de noticias) sea de beneficio para

la sociedad?

4

¿Considera Ud. que la creación del Mahup de

Noticias incremente el nivel de lectura en la sociedad?

5

¿Piensa Ud. Que es una buena opción de que el

Mashup de Noticias este relacionadas con las paginas

sociales?

6

¿Está de acuerdo que es una buena alternativa que el

Mashup de Noticias ofrezca publicidad gratuita para

incrementar las ventas de los productos que se

publiciten?

7

¿Considera Ud. que es de beneficio que el Mashup de

Noticias tenga Weblog donde el usuario interactúe con

el creador de la pagina Web?

Page 98: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

83

8

¿Está de acuerdo que el usuario de la página Web de

Mashup de noticias acceda por medio de su login de

Twitter?

9

¿Piensa ud. que los RIAS sean aplicados en la página

Web de Mashup para Noticias?

10

¿Esta Ud. De acuerdo que aparte de que las noticias

que son actualizadas por el creador de la Pagina Web

Mashup de Noticias exista un motor de búsqueda

como el RSS?UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS

CARRERA DE INGENIERIA EN SISTEMAS COMPUTACIONALES ENCUESTA

DIRIGA A ESTUDIANTES DE SÉPTIMO Y OCTAVO DE LA CARRERA DE

INGENIERIA EN SISTEMAS COMPUTACIONALES

OBJETIVOS

Obtener información sobre las tendencias de los medios de comunicación en

cuanto su nivel de aceptación en este caso en la comparación se evalúa la

televisión con el Internet.

Medir el nivel de conocimiento en las personas sobre el mantenerse informado

y cuanto tiempo están en Internet específicamente en las redes sociales.

Conocer cuánta acogida tiene el Internet y en que niveles tiene más afluencia

de visitas en este mundo cibernético con los usuarios.

INSTRUCTIVO:

Lea detenidamente cada una de las preguntas conteste con mucha seriedad y

responsabilidad si gusta firme y si no, no se preocupe.

De Acuerdo ( D. A)

Page 99: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

84

Indiferente ( I )

En desacuerdo ( E. D.)

ENCUESTA DIRIGA A ESTDUDIANTES DE SÉPTIMO Y OCTAVO SEMESTRE

1. Que medio de comunicación es el que usa más?

Televisión Internet Otros

2. Cuando ingresa al internet que es lo primero que revisa?

Facebook Correo Msn

3. Ha escuchado el Termino Mashup ?

Si No Quizás

4. Sabe ud como se utilizan los feeds en las páginas web?

DA I ED

5. Está de acuerdo con que los usuarios puedan subir noticias cortas e interactuar en la

página web de Mashup de Noticias?

DA I ED

6. ¿Considera Ud. que la plataforma Web en cuanto a lenguaje de programación debe ser

PHP?

DA I ED

7. ¿Está de acuerdo con que el Mashup de Noticias interactué con las paginas sociales para

brindar mejor comodidad a los usuarios al ingresar al internet?

DA I ED

Page 100: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

85

8. Usted está de acuerdo que todo en la actualidad debería ser vía Web?

DA I ED

9. Está de acuerdo con que el Mashup de noticias tenga la información con mezcla de videos

informativo en la página principal

DA I ED

10. Ud cree que las instituciones deben contar con un mashup de noticias para estar

informados y actualizados con las noticias?

DA I ED

PROCESAMIENTO Y ANÁLISIS

ENCUESTA DIRIGA A DIRECTOR Y DOCENTES DE CISC

1. ¿Considera Ud. Que la sociedad debe estar informada de lo que sucede en su

entorno a nivel informativo?

Cuadro No.4 Nivel Informativo

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 13 100 13 100Indiferente 0 0En Desacuerdo 0 0Total 13 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 11 Nivel Informativo

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Page 101: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

86

Elaborado por: Araceli Dávila Macías.

Análisis

El 100 % de los encuestados consideran que la sociedad debe estar informada de

lo que sucede en su entorno a nivel informativo debido a que deben estar pendientes

en si a nivel de economía ya que afecta directamente a su parte financiera y también

tener conocimiento de las decisiones que tome el Gobierno.

2. ¿Cree Ud. Que la tecnología aporta a la sociedad?

Cuadro No. 5 Tecnología en Sociedad.

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 12 Tecnología en la Sociedad

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 70 % respondió que si aporta a la sociedad ya que se descubren nuevas cosas

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 10 77 10 77Indiferente 0 0 13 100En Desacuerdo 3 23Total 13 100

Page 102: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

87

donde el fin común es brindar ayuda a los múltiples problemas sociales que existen

mientras que el 30% argumentó que los trabajos en cuanto a tecnología no avanzan

debido a que no encuentran instituciones que financien proyectos tecnológicos.

3. ¿Cree Ud que una página web que agrupe varias noticias (MASHUP de

noticias) sea de beneficio para la sociedad?

Cuadro No. 6 Noticias Agrupadas

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 13 Noticias Agrupadas

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 11 85 11 85Indiferente 0 0 13 100En Desacuerdo 2 15Total 13 100

Page 103: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

88

Análisis

El 80 % le agrado esta propuesta ya que se mantiene informado a través de la Web

y es una buena solución para la gente que pasa mucho tiempo fuera de sus hogares

debido a las múltiples actividades que realizan mientras que al 20 % no les llama la

atención debido a que las páginas informativas les parecen aburridas.

4. ¿Considera Ud. que la creación del Mashup de Noticias incremente el nivel de

lectura en la sociedad?

Cuadro No. 7 Nivel de Lectura

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 14 Nivel de Lectura

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 80 % piensa que sería de gran utilidad esta página de Noticias en la Web ya que

en la actualidad los jóvenes pasan mucho tiempo en el Internet y esta podría ser una

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 11 85 11 85Indiferente 0 0 13 100En Desacuerdo 2 15Total 13 100

Page 104: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

89

gran opción para mantener informado tanto a los jóvenes como a distintas personas en

la sociedad mientras que el 20 % opina que no importa la estrategia que se utiliza no

resultara el incentivo para que las personas en la sociedad practiquen mas el habito de

la lectura.

5. ¿Piensa Ud. Que es una buena opción de que el Mashup de Noticias este

relacionadas con las paginas sociales?

Cuadro No. 8 Relación con Páginas Sociales.

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 15 Relación con Páginas Sociales.

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 70 % opina que es una buena alternativa para captar la atención de los jóvenes

ya que ellos pasan mucho tiempo en estas redes sociales y esta es una de las pocas

opciones para que ellos se mantengan informados a través del Internet y continúen su

vida en las redes sociales en tanto el 30 % piensa que de ninguna manera se podrá

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 10 77 10 77Indiferente 0 0 13 100En Desacuerdo 3 23Total 13 100

Page 105: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

90

incrementar el hábito de la lectura y mantenerse informado.

6. ¿Está de acuerdo que es una buena alternativa que el Mashup de Noticias

ofrezca publicidad gratuita para incrementar las ventas de los productos que se

publiciten?

Cuadro No. 9 Publicidad Gratuita

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 12 92 12 92Indiferente 1 8 13 100En Desacuerdo 0 0 Total 13 100 Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 16 Publicidad Gratuita

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % está de acuerdo que es una muy buena alternativa más aun siendo gratuita

ya que es una buena manera de promocionar productos entre otras alternativas y

mucho más si es vía web ya que en la actualidad este es un medio muy visitado por

la sociedad mientras que el 10 % se mostró indiferente reacio e incrédulo ante esta

alternativa manifestando que en la actualidad nada es gratis y todo tiene un precio.

Page 106: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

91

7. ¿Considera Ud. que es de beneficio que el Mashup de Noticias tenga Weblog

donde el usuario interactúe con el creador de la pagina Web?

Cuadro No. 10 Interacción con el Creador

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 12 92 12 92Indiferente 1 8 13 100En Desacuerdo 0 0 Total 13 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 17 Interacción con el Creador

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % le agrada la idea ya que es importante que ellos como personas de la

sociedad puedan emitir un criterio o diversas opiniones acerca de la página Web que

están visitando y así sienten que ellos son tomados en cuenta y pueden dar

sugerencias si fuere el caso en tanto el 10% opina que esto es casi imposible ya que la

opinión de la sociedad nunca se toma en cuenta.

8. ¿Está de acuerdo que el usuario de la pagina Web de Mashup de noticias

Page 107: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

92

acceda por medio de su login de Twitter?

Cuadro No. 11 Acceso con Login de Twitter

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 18 Acceso con Login de Twitter

Fuente: Carrera de

Ingeniería en Sistemas

Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 80 % piensa que es importa debido a que el login brinda seguridad en cuanto a

las visitas que realicen los usuarios a la página Web mientras que el 20% piensa que

el login no es de importancia ya que lo que importa es lo que ellos podrán visualizar

en esta página informativa.

9. ¿Piensa Ud. Que los RIAS sean aplicados en la página Web de Mashup para

Noticias?

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 10 77 10 77Indiferente 0 0 13 100En Desacuerdo 3 23Total 13 100

Page 108: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

93

Cuadro No. 12 Aplicación de RIAS

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 12 92 12 92Indiferente 1 8 13 100En Desacuerdo 0 0 Total 13 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 19 Aplicación de RIAS

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % piensa que es de gran importancia la aplicación de los Rias en la página

Web de Mashup para noticias debido a las ventajas que están manejan al momento de

descargar la información en el Internet y ofrecería grandes beneficios cuando se esté

creando esta página Web mientras que el 10% piensa que es una herramienta nueva y

costara implementarla en la página Web de Mashup para noticias.

10. ¿Esta Ud. De acuerdo que aparte de que las noticias que son actualizadas

por el creador de la Página Web Mashup de Noticias exista un motor de

búsqueda como el RSS?

Page 109: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

94

Cuadro No. 13 RSS

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 12 92 12 92Indiferente 1 8 13 100En Desacuerdo 0 0 Total 13 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 20 RSS

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % le agrada la idea ya que al ser un proyecto tecnológico se deben

aprovechar sus recursos al máximo y más aun si automatizan los datos u obtienen

información de otras páginas para estar actualizados mientras que el 10 % piensa que

esto depende del criterio de la persona creadora de esta página Web.

ENCUESTA DIRIGA A LOS ESTUDIANTES DE SÉPTIMO Y OCTAVO

SEMESTRE DE CISC

1. Que medio de comunicación es el que usa más?

Page 110: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

95

Cuadro No. 14 Medio de Comunicación más Utilizada

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.Televisión 40 27 40 27Internet 110 73 150 100Otros 0 0 Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 21 Medio de Comunicación más Utilizada

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 70% contesto que utiliza más el Internet ya que es un medio de comunicación

en el cual se puede obtener casi todo y relacionarse con los demás ya sea por negocio,

ocio, estudio, etc. El 30 % tiene preferencia en ver la televisión ya que es uno de los

primeros medios de comunicación que existió y son reacios a los cambio por esta

razón se mantienen viendo la televisión.

2. Cuando ingresa al internet que es lo primero que revisa?

Cuadro No. 15 Consulta a Internet

FREC. T % FREC. ACUM. T. ACUM.Redes Sociales 40 27 40 27

Page 111: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

96

Correo/MSN 30 20 70 47Las dos Anteriores 80 53 150 100Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 22 Consulta a Internet

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El otro 25% revisa las páginas de redes sociales porque asi se mantiene en

contacto con sus amigos o familiares. El 25% opino que revisan su el correo y se

conectan al MSN por cuestiones laborales mientras el 50% restante expreso que ellos

todo lo hacen simultáneamente.

3. ¿Ha escuchado el Termino Mashup?

Cuadro No. 16 Término Mashup

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.Si 40 27 40 27No 90 60 130 87Quizás 20 13 150 100

Page 112: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

97

Total 150 100 Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 23 Término Mashup

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 55 % contesto no conoce esta terminología pero que sería bueno que los

informen mas sobre esto. El 35 % respondió que sí sabe de qué se trata esta

termología y la comprenden como la integración de una o más paginas. El 10 %

asegura que quizás han escuchado esta terminología

4. ¿Sabe Ud. como se utilizan los feeds en las páginas web?

Cuadro No. 17 Feeds en Páginas Web

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.Si 130 87 130 87No 20 13 150 100Quizás 0 0 Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Page 113: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

98

Elaborado por: Araceli Dávila Macías

Gráfico No. 24 Feeds en Páginas Web

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 80 % sabe cómo se utilizan los feeds en las páginas web ya que consideran

que son de gran aporte para simplificar la realización de estas páginas web El 20 %

desconocen cómo se usan los feeds en las páginas web debido a que se orientan a

otras áreas como son redes o base de datos.

5. Está de acuerdo con que los usuarios puedan subir noticias cortas e

interactuar en la página web de Mashup de Noticias?

Cuadro No. 18 Interacción en la Página

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 130 87 130 87Indiferente 20 13 150 100En Desacuerdo 0 0 Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Page 114: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

99

Elaborado por: Araceli Dávila Macías

Gráfico No. 25 Interacción en la Página

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 80 % considera que está de acuerdo ya que los usuarios considerarían que están

aportado al crecimiento de esta página web y con estas opciones fomentaría mas las

visitas a esta página web. El 20 % contesto que es indiferente el tema y solo les

importaría visitar la página web.

6. ¿Considera Ud. que la plataforma Web en cuanto a lenguaje de

programación debe ser PHP?

Cuadro No. 19 Plataforma Web

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 140 93 140 93Indiferente 0 0En Desacuerdo 10 7 150 100Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Page 115: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

100

Gráfico No. 26 Plataforma Web

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % considera que está de acuerdo ya que esta es una de las últimas tendencias

tecnológicas en cuanto a desarrollo web. Mientras que el 10 % considera que no está

de acuerdo y que se podrían utilizar otro tipo de plataforma como ASP para

desarrollar esta página web.

7. ¿Está de acuerdo con que el Mashup de Noticias interactúe con las paginas

sociales para brindar mejor comodidad a los usuarios al ingresar al internet?

Cuadro No. 20 Interacción con Redes Sociales

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 120 80 120 80Indiferente 30 20 150 100En Desacuerdo 0 0 Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Page 116: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

101

Gráfico No. 27 Interacción con Redes Sociales

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 75 % está de acuerdo con que el Mashup de noticias interactué con las

paginas sociales ya que es una buena alternativa porque el usuario no ingresaría a

tantas páginas cuando acceda al internet porque la pagina web tendrá links para

ingresar desde allí a las distintas redes sociales. Mientras que el 25 % le hez

indiferente este tema con respeto al Mashup de Noticias y su interacción con las

páginas web de redes sociales.

8. Usted está de acuerdo que todo en la actualidad debería ser vía Web?

Cuadro No. 21 Vía Web

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 120 80 120 80Indiferente 0 0En Desacuerdo 30 20 150 100Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 28 Vía Web

Page 117: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

102

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 80 % opina que está de acuerdo en que todo debería ser vía Web ya que estas

son las últimas tendencias en cuanto a tecnología y todas las consultas de negocios u

otro tipo de consultas se las realiza frecuentemente por este medio. Mientras que el

20 % no está de acuerdo porque se muestran reacios al cambio debido a la poca

costumbre que tienen en utilizar el Internet y realizar diferentes tipos de transacciones

vía Web.

9. Está de acuerdo con que el Mashup de Noticias tenga la información con

mezcla de videos informativo en la página principal

Cuadro No. 22 Videos Informativos

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 140 93 140 93Indiferente 10 7 150 100En Desacuerdo 0 0 Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Gráfico No. 29 Videos Informativos

Page 118: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

103

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 90 % contesto que está de acuerdo con que la el Mashup de Noticias tenga esta

característica debido a que su contenido sería interesante a nivel visual y no se

tornaría aburrido en el caso que hubieran solo letras. El 10 % no les interesa el tema y

son indiferentes en cuanto a la creación de esta opción en la página web.

10. Ud. cree que las instituciones deben contar con un mashup de noticias para

estar informados y actualizados con las noticias?

Cuadro No. 23 Instituciones con un Mashup de Noticias

ALTERNATIVAS FREC. T % FREC. ACUM. T. ACUM.De Acuerdo 90 60 90 60Indiferente 30 20 120 80En Desacuerdo 30 20 150 100Total 150 100

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Page 119: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

104

Gráfico No. 30 Instituciones con un Mashup de Noticias

Fuente: Carrera de Ingeniería en Sistemas Computacionales

Elaborado por: Araceli Dávila Macías

Análisis

El 50 % está de acuerdo con que las instituciones deben contener esta página del

Mashup de Noticias para que sus empleados se mantengan informados de lo que

ocurre en la sociedad. El 25% no está de acuerdo ya que las empresas rechazarían el

uso de esta página de Noticias para los empleados debido a que a ellos les interesa

mantenerlos concentrados solo con el trabajo y no mantenerlos informados. El 25 %

es indiferente al tema debido a que desconocen el término Mashup de Noticias y no

están interesados en saber de qué se trata el tema.

PROCEDIMIENTOS DE LA INVESTIGACIÓN

EL PROBLEMA:

Planteamiento del Problema

Situación del Conflicto

Causas y Consecuencias

Delimitación del Problema

Formulación del Problema

Evaluación del Problema

Solución al Problema

Page 120: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

105

Objetivo General

Objetivos Específicos

Alcances

Justificación o Importancia

MARCO TEÓRICO:

Fundamentación Teórica

Fundamentación Filosófica

Fundamentación Psicológica

Fundamentación Sociológica

Fundamentación Pedagógica

Fundamentación Legal

Preguntas Directrices

Definición de términos

METODOLOGÍA:

Diseño de Investigación (Tipo de Investigación)

Población y Muestra

Operacionalización de variables, dimensiones e indicadores

Instrumentos de recolección de datos

Instrumentos de la Investigación

Encuesta

Procedimiento de la Investigación

Recolección de la Información

Criterios para la elaboración de la propuesta.

Page 121: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

106

RECOLECCIÓN DE LA INFORMACIÓN

Para obtener la información acerca del tema Investigación de Aplicación Mashup para

Noticias basado en las Api de Twitter se aplicaron los siguientes términos.

Encuestas tanto a nivel del tema a tratarse como a nivel porcentual sobre las

tendencias que tienen las personas entre ver televisión y usar el internet.

Investigación en internet acerca del tema.

Consulta de folletos y revistas tecnológicas.

Análisis de las técnicas aplicadas.

Criterio para la elaboración de la propuesta

Esta propuesta se elaboró en base a investigaciones en este caso partiendo de un

punto principal que es la tecnología y las tendencias de la gente en cuanto a los

medios de comunicación específicamente comparando dos medios los cuales fueron

la televisión y el Internet ya que en la actualidad debido a que nos manejamos en un

mundo tecnológico y que la tecnología se la utiliza en todo momento ya sea en la

casa, en la vida laboral o en el plano educativo y siendo una herramienta tan útil; al

Internet se lo considera como un medio de comunicación.

Esta comparación de medios se la tuvo que realizar ya que se pretendía realizar

Page 122: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

107

una página de noticias pero era necesario saber si la gente de cierto modo se sentía a

gusto con esta propuesta en este caso de manera indirecta preguntando las tendencias

en cuanto a los medios de comunicación.

Luego como es de suponerse el Internet le gano a la televisión ya que vivimos en

una sociedad tecnológica actualmente, por lo que ahora se debería a proceder a

buscar en donde y a quien le podría servir esta propuesta; llegando a la conclusión de

que en el campo a investigar seria los jóvenes estudiantes de la carrera de sistemas a

los cuales se les pregunto si conocían el término Mashup entre otros temas referentes

al Mashup y sus componentes.

Una vez definida esta investigación de campo se llego a la conclusión de realizar la

siguiente propuesta llamada INVESTIGACIÓN DE MASHUP PARA NOTICIAS

BASADO EN LAS API DE TWITTER debido a que la mayoría de gente y no tan

solo los jóvenes están actualizados en el mundo de las redes sociales y por esta razón

es el nombre de la misma.

CAPÍTULO IV

MARCO ADMINISTRATIVO

CRONOGRAMA

Cuadro No. 24 Cronograma

Page 123: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

108

Fuente: Araceli Dávila Macías Elaborado por: Araceli Dávila Macías

PRESUPUESTO

Cuadro No. 25 Presupuesto

Page 124: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

109

EGRESOS $ DÓLARES

Suministros de oficina y computación 150.00

Fotocopias 30.00

Libros y Documentos 150.00

Servicio de Internet (por 18 meses) 540.00

Transporte 70.00

Refrigerio 40.00

Empastado 140.00

TOTAL $ 1120.00

Fuente: Araceli Dávila Macías

Elaborado por: Araceli Dávila Macías

CAPÍTULO V

CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES

Page 125: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

110

Se ha llegado a la conclusión de este trabajo final de tesis grado, en el cual se

puede considerar que se han alcanzado tanto los objetivos generales como los

objetivos específicos planteados en la introducción del proyecto, destacándose los

siguientes resultados:

Se tiene un sólida base teórica acerca del Mashup de donde surge esta

terminología, sus primeros inicios de cómo se da a conocer en el ámbito de la

Tecnología y como han surgido los Mashup en la actualidad; cuales son los

componentes que se necesitan para poder utilizar un Mashup, los tipos de Mashup

que existen para luego proceder a explicar detalladamente el tipo de Mashup que se

eligió para este proyecto de tesis.

Para canalizar estos conocimientos, se procedió al análisis de patrones de diseño

que surgen de la observación referente al campo de investigación del entorno en el

cual se desarrolla este proyecto, con la única finalidad de ofrecer nuevas tendencias

tecnológicas acerca del entorno web.

Posteriormente, se ha considerado los aspectos técnicos, tecnológicos y

metodológicos necesarios para llevar a cabo el desarrollo de este proyecto

completando así la investigación teórica del proyecto, y contando con el tutor con los

conocimientos necesarios para desarrollar una solución al problema planteado.

Como implementación practica se ha desarrollado un sitio online en base a un

desarrollo de requerimientos considerando la situación problemática a los ojos de los

patrones de diseño Web 2.0, y llevando a cabo el análisis y diseño de la aplicación

mediante UML, usando también Joomla el cual es un gestor de contenido que

permitió poder realizar este sitio web.

Page 126: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

111

La mencionada aplicación se encuentra funcional en la actualidad, con el

compromiso de haber dedicado esfuerzo personal en el desarrollo y crecimiento

futuro de la comunidad de contenidos que ha surgido del desarrollo del proyecto, ya

que considera que genuinamente es la base para un lugar de participación, abierto a la

retroalimentación y generación libre de contenidos.

Las herramientas que se utilizaron para la realización de este proyecto son

herramientas open source las cuales marcan una gran tendencia en la actualidad ya

que no se necesitan comprar licencias constantemente y los códigos en estas

herramientas se encuentran disponibles con la finalidad de que otras personas adapten

nuevas modificaciones de acuerdo a los requerimientos que ellas deseen.

Se tomo la decisión de las herramientas open source luego de una análisis en

cuanto las tendencias que se tienen en la actualidad para realizar las diferentes

páginas web que existen actualmente, siendo la gran mayoría de licenciamiento libre

y esto se debe porque el gobierno esta migrando todo lo referente a la tecnología en

este entorno.

En este proyecto también se tomo en cuenta las redes sociales ya que hoy en día

son el boom tecnológico ya que por este medio a mas estar en contacto con las

personas son un gran referente tanto publicitario como empresarial para realizar los

negocios, por esta razón se escogió una de las redes sociales como es el Twitter para

que forme parte de este proyecto ya que se enlaza directamente con la pagina del

Twitter con la finalidad de que la persona que ingrese a la página web de noticias

también esté al tanto de lo que sucede en su red social del Twitter. Estos grandes

mashups Twitter representan las mejores y más únicas formas que los datos de Twitter

se ha utilizado para crear una experiencia única.

De esta manera creamos un aporte a la sociedad, adaptando nuevas estructuras

sociales, en donde se pone al alcance herramientas tecnológicas para el desarrollo de

Page 127: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

112

las mismas. Un Mashup de contenido muestra las diferentes opciones de contacto con

el mundo a eso incluimos Twitter, Facebook, Flickr y canales de videos para Youtube.

Cabe destacar que el uso de internet está al alcance de todos, esto se denomina

Universalización de la Web, ya sea disponible en la Pc del Trabajo, en el Hogar, o en

el servicio celular de tu operador telefónico favorito. Es decir se explota un concepto

tan amplio como es el uso de Internet en su máxima expresión.

RECOMENDACIONES

Este proyecto es un gran aporte para la comunidad en el cual se investigó para

poder hacer realidad el mismo, también se encuentra bien detallado en cuanto a la

documentación como en la parte de las fuentes bibliográficas las cuales son

referencias que comprueban de donde se pudo documentar este proyecto, con la

Page 128: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

113

finalidad que cualquier estudiante o persona particular que desee realizar

modificaciones y unificar más ventajas a este proyecto lo haga, lo que genera en un

corto plazo el avance de las sociedades.

Además fomentamos una cultura de enriquecimiento mental en cuanto al mundo

de las noticias ya que hoy en día ya sea por falta de tiempo o por otras razones las

personas se desconectan de los aconteceres del país y del mundo por lo que se

encuentran desinformados, pero sabiendo que las personas al menos una vez al día

ingresan al internet ya sea por negocios por revisar sus correos o por investigaciones,

se creó esta página web Informática que se fusiona junto a la red social a través de el

enlace que tiene con la única finalidad de brindarle toda la comodidad a las personas

de que a la vez que se informan no pierdan contacto en las distintas redes sociales.

Con este sitio web www.mantentealdia.net las personas que lo visiten a mas de

publicar noticias tienen el chat interactivo en el cual se comunican con los diferentes

usuarios que se encuentren conectados en ese momento, también pueden debatir

acerca de sus noticias publicadas o de las noticas actualizadas y si tienen cuenta en la

red social del twitter tienen la mensajería de publicación instantánea, con estas

múltiples opciones brindamos participación exclusiva entre usuario y también el

podrá enviar mensajes de sugerencias al administrador de la pagina y también si fuere

el caso en que el usuario lo desee participar activamente para las mejoras del sitio

web.

Esta página web informativa www.mantentealdia.net se encuentra diseñada en un

entorno web de tal forma en que los estudiantes que deseen realizar más cambios

positivos a la misma no tengan ningún problema en cuanto a códigos ni diseños de

pantallas además manejan un entorno open source que es hacia donde están migrando

todas los programas y tendencias tecnologías ya que a mas de no pagar por licencias

de manejo de software fomenta la cultura de conocimientos compartidos para que

todos tengan acceso a aportar las distintas ideas con una finalidad aportar en un

Page 129: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

114

beneficio para todos y aprender día a día y mejorar tanto a nivel estudiantil como

profesional.

Se debe tener en cuenta que el sitio web www.mantentealdia.net puede abrir en

los navegadores más populares del mercado (Mozilla Firefox, IE), pero en el caso de

los exploradores recientes como por ejemplo google chrome el sitio web no se puede

visualizar cabe destacar que esto pasa incluso con las paginas bancarias y eso se debe

a certificaciones y requerimientos internos del propio explorador, pero nuestro sitio

web al darle F5 si se puede visualizar y trabajar en el.

NETGRAFÍA

Bernardo Hernández, Los mashups dan un nuevo enfoque a la Web Pagina 18

En dos años serán una tecnología muy habitual de Internet:

http://www.idg.es/computerworld/articulo.asp?id=184535

Page 130: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

115

Jesús Arévalo, Los mashups dan un nuevo enfoque a la Web Página 19

En dos años serán una tecnología muy habitual de Internet:

http://www.idg.es/computerworld/articulo.asp?id=184535

Steven Berlin Johnson, Twitter: Página 28

http://es.wikipedia.org/wiki/Twitter

Evan Williams, A Twiiter le gustaría trabajar con Facebook a pesar de su actitud

Fundador del Twitter Página 32

http://interartix.com/personajes/evan-williams/

http://interartix.com/2010/11/a-twiiter-le-gustaria-trabajar-con-facebook-a-pesar-de-

su-actitud/

Diego Díaz, Los mashups dan un nuevo enfoque a la Web Página 34

En dos años serán una tecnología muy habitual de Internet:

http://www.idg.es/computerworld/articulo.asp?id=184535

Rogelio Bernal, El 'mashup', la mezcla de servicios en Internet, atrae a las empresas:

http://www.elpais.com/articulo/portada/mashup/mezcla/servicios/Internet/atrae/empre

sas/elpportec/20061026elpcibpor_1/Tes Página 38

BIBLIOGRAFÍA

Raymond Yee, Pro Web 2.0 Mashup: Remixing Data and Web Services, 2008,

editorial Apress, 603 paginas

© Raymond Yee 2008

Page 131: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

116

Página xxix Página 19

Carlos Neri, Diana Fernandez Zalazar, Telarañas de conocimiento Educando en

tiempos de la Web 2.0, 182 paginas

Página 97 Página 27

Javier Celaya, La empresa en la Web 2.0 El impacto de las redes sociales y las

nuevas formas de comunicación online en la estrategia empresarial, 200 páginas,

© Planeta de Agostini, Profesional y Formación, SL, 2008.

Página 14 Página 30

Oswald Campesato, Kevin Nilson, Web 2.0 Fundamentals, 750 páginas,

© 2011 by Jones and Bartlett Pusblisher, LLC

Página 305 Página 47

Kant, Defensa y Limites de la razón, edición 2005, Centro Editorial Universidad del

Rosario, 493 páginas.

©Escuela de Ciencias Humanas

©Facultad de Jurisprudencia

©Universidad Colegio Mayor de Nuestra Señora del Rosario

©Centro Editorial Universidad del Rosario

©Claudia Card. Lucy Carrillo Castillo, Felipe Castañeda Salamanca, Juan Esteban

Constain Croce, Francisco Cortes Rodas, Carolina Galindo Hernández, Camila de

Gamboa Tapias, Sebastian Alejandro González M., Wilson Herrera Romero,

Magdalena Holguín, Mauricio Plazas Vega, Jorge Sierra, Leonardo Tovar González,

Ángela Uribe Botero, German Vargas Guillen, Melissa Zinkin

Página 328 Página 49

Page 132: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

117

De este libro se obtuvo la información para el fundamento sociológico

Fernando Giner de la Fuente

Los sistemas de información en la sociedad del conocimiento

NETGRAFÍA DE GLOSARIO DE TÉRMINOS

Ad Hoc:

http://facultad.bayamon.inter.edu/cgonzalezr/ELEN4618/Adhoc.pdf http://www.asesoriainformatica.com/definiciones_a.htm

Page 133: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

118

API:

http://www.asesoriainformatica.com/definiciones_a.htmhttp://www.nachocabanes.com/diccio/ndic.php#A

ATOM:

http://elticus.com/diccionario/Atom.htmlhttp://www.internetglosario.com/

BACK OFFICE:

http://es.wikipedia.org/wiki/Back_office http://86400.es/2009/10/14/la-importancia-de-un-backoffice/

BLOG:

http://elticus.com/diccionario/blog.htmlhttp://www.internetglosario.com/letra-b.htmlhttp://www.lawebdelprogramador.com/diccionario/buscar.php?letra=&cadena=blog

BPM:

http://www.ibermatica.com/ibermatica/bpmhttp://www.club-bpm.com/Noticias/art00070.htm http://www.buenastareas.com/ensayos/Bpm-Informatica/3887743.html

CMS:

http://www.haceclick.com.uy/index.php?option=com_content&view=article&id=141 http://www.asesoriainformatica.com/definiciones_c.htm http://www.esdirectorios.com/what-is-a-website-content-management-system-cms/

CRM:

http://www.webandmacros.com/crm.htm http://www.informatica-hoy.com.ar/software-crm/Que-es-CRM.php

Page 134: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

119

http://www.degerencia.com/tema/crm

CSS:

http://www.haceclick.com.uy/index.php?option=com_content&view=article&id=141 http://www.asesoriainformatica.com/definiciones_c.htmhttp://www.alegsa.com.ar/Dic/css.php

EMOTE.IN:

http://www.killerstartups.com/comm/emote-in-microblog-the-way-your-are-feeling/ http://www.incubaweb.com/emote-in-un-twitter-para-publicar-emociones/

ESB:

http://www.misbytes.com/wp/2006/10/08/buses-de-servicios-empresariales-esb-soa-bpm-relacionando-todas-estas-siglas/http://icomparable.blogspot.com/2009/04/que-es-un-esb-enterprise-service-bus.html

FEED:

http://jamillan.com/v_feed.htm http://etimologias.dechile.net/?feed

FRONT END:

http://culturacion.com/2009/04/frontend-y-backend-%C2%BFque-son/http://es.wikipedia.org/wiki/Front-end_y_back-end

GOOGLE MAPS:

http://webadictos.blogsome.com/2006/08/24/google-maps/ http://es.wikipedia.org/wiki/Google_Maps

Page 135: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

120

HTML:

http://www.internet-ka.com/Diccionario/H-Html.htmhttp://www.lawebdelprogramador.com/diccionario/buscar.php?letra=H&cadena=html&x=0&y=0

HTTP:

http://www.alegsa.com.ar/Dic/http.phphttp://www.lawebdelprogramador.com/diccionario/buscar.php?letra=H&cadena=HTTP&x=0&y=0

INTERFAZ:

http://www.alegsa.com ar/Dic/interfaz.phphttp://etimologias.dechile.net/?interfaz

JAIKU:

http://www.scsintl.com/sistemasoperativos.htm http://www.ecured.cu/index.php/Haiku_(Sistema_operativo) http://es.wikipedia.org/wiki/Haiku_(sistema_operativo)

JAVASCRIPT: http://www.alegsa.com.ar/Dic/javascript.phphttp://elticus.com/diccionario/JavaScript.html

JOOMLA:

http://edujoomla.es/que-es-joomlahttp://www.joomlaos.net/ique-es-joomlahttp://es.wikipedia.org/wiki/Joomla!

JSON:

http://www.lawebdelprogramador.com/diccionario/buscar.php?letra=I&cadena=JSON&x=0&y=0

Page 136: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

121

http://www.json.org/json-es.htmlhttp://es.wikipedia.org/wiki/JSON

METADATOS:

http://www.alegsa.com.ar/Dic/metadato.php http://www.hipertexto.info/documentos/metadatos.htm

MICROBLOGGING:

http://es.wikipedia.org/wiki/Microblogginghttp://preguntasrespuestas.es/que-es-el-microblogging.html

MOODLE:

http://es.wikipedia.org/wiki/Moodlehttp://moodle.org/mod/glossary/view.php?id=3877&mode=letter&hook=M&sortkey=CREATION&sortorder=asc

OAUTH:

http://es.wikipedia.org/wiki/OAuthhttp://laxmarcaellugar.blogspot.com/2011/08/el-protocolo-de-autenticacion-oauth.html

OUTSOURCING:

http://www.econ4.com/asp.htmlhttp://www.gestiopolis.com/recursos/documentos/fulldocs/ger/outscng.htm

PARADIGMA:

Diccionario del Dr. Francisco Morán Márquez – Decano de la Facultad de Filosofía de la Universidad de Guayaquil. http://es.wikipedia.org/wiki/Paradigma

Page 137: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

122

PHP:

http://www.lawebdelprogramador.com/diccionario/buscar.php?letra=I&cadena=php&x=0&y=0http://www.alegsa.com.ar/Dic/php.php

PERL: http://www.lawebdelprogramador.com/diccionario/buscar.php?

letra=I&cadena=perl&x=0&y=0http://www.alegsa.com.ar/Dic/perl.phphttp://es.wikipedia.org/wiki/Perl

PIPES:

http://es.wikipedia.org/wiki/Tuber%C3%ADa_(inform%C3%A1tica)http://es.wikipedia.org/wiki/Tuber%C3%ADa_(inform%C3%A1tica)

PLUG IN:

http://www.alegsa.com.ar/Dic/plugin.phphttp://es.wikipedia.org/wiki/Complemento_(inform%C3%A1tica)http://www.saberia.com/2010/01/que-es-un-plugin/

PLURK:

http://www.glosariodigital.com/glosario/web20/http://es.wikipedia.org/wiki/Plurk

REST:

http://users.dsic.upv.es/~rnavarro/NewWeb/docs/RestVsWebServices.pdfhttp://es.wikipedia.org/wiki/Representational_State_Transfer

Page 138: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

123

RIA:

http://es.wikipedia.org/wiki/Rich_Internet_Applicationshttp://foros.cristalab.com/que-es-una-ria--t48999/

RSS:

http://es.wikipedia.org/wiki/RSShttp://www.internetglosario.com/letra-r.html

SCREEN SCRAPPING:

http://es.wikipedia.org/wiki/Screen_scraping

SSL:

http://www.alegsa.com.ar/Dic/ssl.phphttp://www.alegsa.com.ar/Dic/ssl.phphttp://www.hooping.net/glossary/ssl-110.aspxhttp://www.hooping.net/glossary/ssl-110.aspx

SOA:

http://www.internetglosario.com/letra-s.htmlhttp://www.desarrolloweb.com/articulos-copyleft/articulo-definicion-soa.htmlhttp://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios

SOAP:

http://www.internetglosario.com/letra-s.htmlhttp://www.alegsa.com.ar/Dic/soap.phphttp://www.cibernetia.com/manuales/servicios_web/3_soap.phphttp://es.wikipedia.org/wiki/Arquitectura_orientada_a_servicios

TWEET:

http://myspace.wihe.net/que-es-un-tweet/http://es.wikipedia.org/wiki/Twitter

Page 139: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

124

TWITTEAR:

http://es.wikipedia.org/wiki/Twitterhttp://www.datines.com/twitter-com-significado-de-rt/

TWITTER:

http://definicion.de/twitter/http://es.wikipedia.org/wiki/Twitter

TUMBLR:

http://www.fernan.com.es/2008/12/16/tumblr/http://es.wikipedia.org/wiki/Tumblr

UML:

http://www.lawebdelprogramador.com/diccionario/buscar.php?letra=U&cadena=uml&x=0&y=0http://www.mastermagazine.info/termino/7006.phphttp://www.alegsa.com.ar/Dic/uml.phphttp://es.wikipedia.org/wiki/Lenguaje_Unificado_de_Modelado

UPGRADE:

http://www.alegsa.com.ar/Dic/upgrade.phphttp://www.lawebdelprogramador.com/diccionario/buscar.php?letra=U&cadena=upgrade&x=0&y=0http://es.wikipedia.org/wiki/Windows_Update

WEBLOG:

http://www.lawebdelprogramador.com/diccionario/buscar.php?

Page 140: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

125

letra=U&cadena=weblog&x=0&y=0 http://www.weblogssl.com/que-es-un-bloghttp://es.wikipedia.org/wiki/WeBlog

WEB BROWSER:

http://www.pergaminovirtual.com.ar/definicion/Browser.htmlhttp://www.diccionarios-online.com.ar/tecno/Web+browser.htmlhttp://es.wikipedia.org/wiki/Navegador_web

WIDGETS:

http://es.wikipedia.org/wiki/Widgethttp://www.alegsa.com.ar/Dic/widget.phphttp://www.maestrosdelweb.com/editorial/widgets/

WIKIMAPIA:

http://www.puntogeek.com/2008/11/17/wikimapia-wiki-google-maps/http://es.wikipedia.org/wiki/WikiMapia

WINDOWS LIVE:

http://www.alegsa.com.ar/Dic/windows%20live.phphttp://www.pergaminovirtual.com.ar/definicion/Windows_Live.htmlhttp://es.wikipedia.org/wiki/Windows_live

WSDL:

http://www.lawebdelprogramador.com/diccionario/buscar.php?letra=U&cadena=WSDL&x=0&y=0http://www.alegsa.com.ar/Dic/wsdl.phphttp://es.wikipedia.org/wiki/WSDL

XML:

http://www.lawebdelprogramador.com/diccionario/buscar.php?

Page 141: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

126

letra=U&cadena=xml&x=0&y=0http://www.alegsa.com.ar/Dic/xml.phphttp://es.wikipedia.org/wiki/Extensible_Markup_Language

YOU TUBE:

http://www.alegsa.com.ar/Dic/youtube.com.phphttp://es.wikipedia.org/wiki/YouTube

FUENTE DE GRÁFICOS

Adam Green Comportamiento de la Api de Twitter Página 32

http://140dev.com/twitter-api-programming-tutorials/twitter-api-database-cache/

Adam Avelar Islas Como trabaja un CMS Página 37

Page 142: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

127

http://www.unpocogeek.com/2009/07/13/funcionamiento-de-un-cms-y-claves-para-

elegir-el-nuestro/

Isidro B. Funcionamiento de Joomla Página 37

http://www.gnumla.com/articulos/joomla-platform-poject-el-framework-se-separara-del-cms.html

Víctor Domínguez Funcionamiento del Mashup de Noticias Página 39

http://marketingmb.wordpress.com/2010/06/05/ensayo-mashup/

Page 143: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

1

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS

CARRERA DE INGENIERIA EN SISTEMAS

COMPUTACIONALES

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO

EN LAS API DE TWITTER

TESIS DE GRADO

Previa a la obtención del Título de:

INGENIERO EN SISTEMAS COMPUTACIONALES

AUTORA: ARACELI MARITZA DAVILA MACIAS

DIRECTOR DE TESIS: ING. XAVIER LOAIZA

GUAYAQUIL – ECUADOR

AÑO: 2011

Page 144: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

2

APROBACION DEL TUTOR

En mi calidad de Tutor del trabajo de investigación: “INVESTIGACIÓN DE

APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN LAS API DE

TWITTER” elaborado por la Srta. ARACELI MARITZA DAVILA MACIAS,

egresada de la Carrera de Ingeniería en Sistemas Computacionales, Facultad de

Ciencias Matemáticas y Físicas de la Universidad de Guayaquil, previo a la

obtención del Título de Ingeniero en Sistemas, me permito declarar que luego de

haber orientado, estudiado y revisado, la apruebo en todas sus partes.

Atentamente

_______________________

Ing. XAVIER LOAIZA

DIRECTOR DE TESIS

Page 145: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

3

DEDICATORIA

Dedico este proyecto a Dios ya que sin el nada es posible y sé que siempre cuento

con la bendición de él.

A mi abuelita María Moreno Tomalá que aunque no esté conmigo se que desde el

cielo me da las fuerzas para continuar y así culminar mis metas propuestas.

A mis padres Juan Fernando Dávila Moreno y Cleotilde Maritza Macías Pinargote

por toda su esfuerzo, dedicación, amor de padres y sobre todo por brindarme su

apoyo y confianza incondicional y siempre creer en mi para culminar con éxito y

dedicación mis metas propuestas.

A mis hermanos Fernando y María Dávila ya que a pesar de los inconvenientes

nunca dudaron en que culminaría mis estudios superiores como Ingeniera en

Sistemas.

A mis amigos y amigas que siempre me dieron fuerzas para continuar y no declinar

en mi meta propuesta que era la culminación de mi carrera universitaria.

A los maestros de la Universidad de Guayaquil por los conocimientos impartidos que

fueron de gran ayuda para la culminación de mi proyecto de tesis.

Araceli Dávila Macías.

Page 146: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

4

AGRADECIMIENTO

Agradezco a Dios ya que siempre me ayudo a continuar para culminar otra más en mi

vida estudiantil.

A mi abuelita María Moreno Tomalá ya que gracias a ella y a sus consejos sigo

adelante y su recuerdo hace que yo siga adelante día a día y que culmine todas las

metas que me propongo.

A mis padres que a pesar de que no estén los dos juntos a mi lado siempre supieron

estar junto a mi de manera incondicional para darme fuerzas en los momentos más

difíciles que pensé que no sería posible esta gran meta.

A mis hermanos María y Fernando Dávila que a pesar de todo me daban la fuerza

necesaria para continuar día a día y culminar mi proyecto de tesis.

A mis amigos por sus ánimos y apoyo para no desfallecer y poder concluir esta etapa

de mi vida estudiantil en especial a mi amiga la Ing. Alicia Ruiz Ramírez y a mi

amigo el Ing. Poll Cedeño que siempre estuvieron conmigo en este proceso de tesis.

Finalmente gracias a todos los que me han apoyado que son mis familiares, amigos y

docentes y a los que no también ya que aunque quieran verme declinar en mis

objetivos siempre por más duro que sea el camino y los obstáculos que se presente

con la fortaleza de Dios y con mis conocimientos seré capaz de realizar todas las

metas que me proponga.

Araceli Dávila Macías

Page 147: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

5

TRIBUNAL DE GRADO

Ing. Fernando Abad Montero Ing. Juan Chanabá Alcócer DECANO DIRECTOR DE C.I.S.C

Ing. Xavier Loaiza Nombre y apellido DIRECTOR DE TESIS PROFESOR DEL ÁREA - TRIBUNAL

Ab. Juan Chávez AtochaSECRETARIO

Page 148: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

6

UNIVERSIDAD DE GUAYAQUIL

FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS

COMPUTACIONALES

TEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO

EN LAS API DE TWITTER

Proyecto de trabajo de grado que se presenta como requisito para optar por el título de

INGENIERO EN SISTEMAS COMPUTACIONALES

Autora: Dávila Macías Araceli Maritza

C.I.: 092216316-7

Director de Tesis: Ing. Xavier Loaiza

Guayaquil, ______de_____

Page 149: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

7

CERTIFICADO DE ACEPTACIÓN DEL TUTOR

En mi calidad de Tutor, nombrado por el Departamento de Graduación y la Direcciónde la Carrera de Ingeniería en Sistemas Computacionales de la Universidad deGuayaquil,

CERTIFICO:

Que he analizado el Proyecto de Grado presentado por la egresada DAVILAMACIAS ARACELI MARITZA, como requisito previo para optar por el título deIngeniero cuyo problema es:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADOEN LAS API DE TWITTER

Considero aprobado el trabajo en su totalidad.

Presentado por:

DAVILA MACIAS ARACELI MARITZA C.C. 092216316 -7

DIRECTOR DE TESIS: ING. XAVIER LOAIZA

Guayaquil, ______de_____

Page 150: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

8

ÍNDICE GENERAL

Presentación i

Aprobación del Tutor ii

Dedicatoria iii

Agradecimiento iv

Tribunal de Grado v

Requisito para Obtención del Título vi

Certificado de Aceptación vii

Índice General viii

Índice de Gráficos x

Resumen xiii

Abstract xiv

CAPÍTULO I MANUAL TÉCNICO 1

Introducción 1

El Framework 2

Estructura 2

Datos técnicos del sitio 7

Diagrama de colaboración 8

Diagrama de flujo de datos 8

Diagrama de casos de uso 12

Diagrama de eventos 20

Modelo entidad relación 21

Diccionario de datos 22

Script para la creación de base de datos 77

Codificación de componentes 100

Page 151: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

9

CAPÍTULO II MANUAL DE USUARIO 685

Introducción 686

Objetivos de este manual 686

A quien va dirigido este manual 686

Conocimientos previos 687

Acerca de este manual 687

Características del sitio 687

Mashup de contenidos 689

Descripción del sitio 689

Administración 689

Visitante 701

Page 152: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

10

ÍNDICE DE GRÁFICO

Gráfico No. 1 Archivos del proyecto Mashup 3

Gráfico No. 2 Módulos participantes del Mashup 4

Gráfico No. 3 Archivos pertenecientes al módulo de encuesta 5

Gráfico No. 4 Archivo mod_poll.php 5

Gráfico No. 5 Archivos de Inicialización de módulos por idioma 6

Gráfico No. 6 Contenido de las Variables globales en el archivo

es-ES.com_poll.ini 6

Gráfico No. 7 Diagrama de Colaboración 8

Gráfico Mo. 8 Diagrama de Contexto o Nivel cero 8

Diagrama No. 9 Diagrama de Nivel Superior o Nivel uno 9

Diagrama No.10 Diagrama de Nivel Inferior o Nivel 2 10

Diagrama No. 11 Diagrama de Niveles extendidos o Nivel 3 11

Gráfico No. 12 Casos de Uso Primer Nivel 12

Gráfico No. 13 Casos de Uso Nivel II – Elaboración de Encuestas 13

Gráfico No. 14 Casos de Uso Nivel II – Envío de Mensajes al

Administrador del Sitio 13

Gráfico No. 15 Casos de Uso Nivel II – Lectura de Clasificados 13

Gráfico No. 16 Casos de Uso Nivel II – Lectura de Noticias 14

Gráfico No. 17 Casos de Uso Nivel II – Fotos 14

Gráfico No. 18, Casos de Uso Nivel II – Videos 14

Gráfico No. 19 Casos de Uso Nivel II – Enlace con Módulo Twitter 15

Gráfico No. 20 Casos de Uso Nivel II – Registro en Sitio 15

Gráfico No. 21 Casos de Uso Nivel II – Suscripción de

Marcadores Dinámicos 16

Gráfico No. 22 Diagrama de Eventos del Sitio 20

Gráfico No. 23 MER Sitio Mashup 21

Page 153: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

11

Gráfico No. 24 Url Oficial del Mashup 688

Gráfico No. 25 Página principal www.mantentealdia.net 689

Gráfico No. 26 Sitio Web de Administración 690

Gráfico No. 27 Loggin de Inicio – Administración Joomla 690

Gráfico No. 28 Pantalla principal de Administración 691

Gráfico No. 29 Administrador de Artículos 692

Gráfico No. 30 Administrador de Artículos 693

Gráfico No. 31 Administrador de Categorías 694

Gráfico No. 32 Administrador de Idiomas 694

Gráfico No. 33 Administrador de Plantillas 695

Gráfico No. 34 Presentación preliminares de plantillas 696

Gráfico No.35 Administrador de Usuarios 696

Gráfico No. 36 Formulario de Ingreso a un usuario 697

Gráfico No. 37 Grupo de Seguridad asignado al usuario 698

Gráfico No. 38 Módulos 698

Gráfico No. 39 Administrador de Módulos 699

Gráfico No. 40 Redes Sociales 700

Gráfico No. 41 Edición Modulo de Redes Sociales 700

Gráfico No. 42 Registro de Usuario nuevo 701

Gráfico No. 43 Formulario de Registro 702

Gráfico No. 44 Usuario Correctamente Loggeado 702

Gráfico No. 45 Inicio de Sesión Twitter 703

Gráfico No. 46 Formulario de Conexión mashup-Twitter 704

Gráfico No. 47 Página principal de Twitter 704

Gráfico No. 48 Sesión iniciada, servicio Twitter en Mashup 705

Gráfico No. 49 Chat Habilitado para usuario de Twitter 705

Gráfico No. 50 Módulo Twitter en Mashup 706

Gráfico No. 51 Encuestas 706

Gráfico No. 52 Chat 707

Gráfico No. 53 Chat Interactivo 708

Page 154: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

12

Gráfico No. 54 RSS – Varios RSS de Noticias 709

Gráfico No. 55 Fotos 710

Gráfico No. 56 Subida de Fotos 710

Gráfico No. 57 Comentarios en Fotos 711

Gráfico No. 58 Videos 711

Gráfico No. 59 Ver Videos 712

Gráfico No. 60 Subir Videos 713

Gráfico No. 61 Noticia escrita por un usuario 713

Gráfico No. 62 Editor de texto de Noticias 714

Gráfico No. 63 Los más Bloggeados 715

Gráfico No. 64 Productos y Servicios 716

Gráfico No. 65 Lista de servicios disponibles 716

Gráfico No. 66 Valoración del Servicio 717

Gráfico No. 67 Formulario de Contacto 718

Gráfico No. 68 Facebook-“Me Gusta” 719

Gráfico No. 69 Formulario de Acceso rápido a Facebook 719

Gráfico No. 70 Voto en “Me gusta” – Facebook 720

Gráfico No. 71 Recomendar 720

Gráfico No. 72 Tweets en línea 721

Gráfico No. 73 Botón Twittear 722

Gráfico No. 74 Botón Sígueme de Twitter 722

Gráfico No. 75 Siguiendo al sitio en twitter 723

Gráfico No. 76 Menú del Tráfico del Sitio 724

Gráfico No. 77 Monitoreo de Tráfico del Sitio 724

Gráfico No. 78 Menú para ingresar al administrador 725

Gráfico No. 79 Monitoreo de Administración 726

Page 155: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

13

UNIVERSIDAD DE GUAYAQUILFACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALESTEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADOEN LAS API DE TWITTER

Autora: Dávila Macías Araceli Maritza Tutor: Loaiza Xavier Ing.

RESUMEN

Uno de las componentes principales para la realización de este proyecto es lograr comprenderel concepto ambiguo de la Web 2.0 entendiendo las formas en las que se manifiesta, susimplicancias sociales y las tecnologías que le dan soporte para lograr que su aplicaciónpermita la implementación de este sitio web www.mantentealdia.net. Para desarrollar eltrabajo se ha realizado una investigación en base a diferentes fuentes bibliográficasanalizando los conceptos de la web 2.0, social media, patrones de diseño y diversastecnologías aplicables. También se utilizan componentes como el wamp server y joomla parala realización del presente proyecto.

Los mashups son aplicaciones web generadas a partir de distintas fuentes de información,que se conectan con ésta a partir de una API (Interfaz de programación de aplicaciones)que permite la interconexión con distintos sistemas, aplicaciones, servicios web, ocanales de información (RSS o ATOM). Mashups se han convertido en una corrienteprincipal de la Web. Recientemente, varias plataformas mashup han introducido algollamado centro usuario, lo que permite a los usuarios finales crear, compartir ydisfrutar de sus propios servicios, por esta razón se decidió de entre los diferentestipos de mashup escoger realizar el mashup de noticias de tal forma que los usuariosparticipen de forma interactiva cada vez que ingresen al sitio webwww.mantentealdia.net.

Finalmente se realiza la implementación en open source de un producto final llamadoINVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADO EN LASAPI DE TWITTER Y PROPUESTA DE UN DEMO en las cuales incluye una aplicación alcontexto usuario-administrador mediante una solución de software online. En la actualidaddicho servicio se encuentra funcional y su futuro crecimiento requiere tiempo de maduracióny esfuerzo, por lo que seguirá trabajando sobre el tema de manera independiente una vezfinalizada la etapa de tesis de grado.

DescriptoresMashup API de Twitter Mashup de Noticias Web 2.0

Page 156: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

14

UNIVERSIDAD DE GUAYAQUILFACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALESTEMA:

INVESTIGACIÓN DE APLICACIÓN MASHUPS PARA NOTICIAS BASADOEN LAS API DE TWITTER

Autora: Dávila Macías Araceli Maritza Tutor: Loaiza Xavier Ing.

ABSTRACT

One of the main components for this project is to understand the ambiguous conceptof Web 2.0 understanding the ways in which it manifests itself, its social andtechnologies that support it to make your application to enable the implementation ofthis www.mantentealdia.info website. To develop the work was carried out researchbased on different literature sources discussing the concepts of web 2.0, social media,design patterns and various applicable technologies. Components are also used as thewamp server and joomla for the realization of this project.

Mashups are web applications generated from various sources, that connect to it froman API (Application Programming Interface) that allows the interconnection withother systems, applications, web services, or information channels (RSS or ATOM).Mashups have become a mainstream Web. Recently, several mashup platforms haveintroduced something called center user, which allows end users to create, share andenjoy their own services, for this reason it was decided among the different types ofmashup mashup chooses to do so news users to participate interactively each timethey enter the website www.mantentealdia.info.

Finally, making the open source implementation of a final product called mashupsRESEARCH NEWS APPLICATION BASED ON TWITTER API and proposal of aDEMO which includes an application to the context user-administrator using asoftware solution online. Currently the service is functional and its future growth andmaturation takes time effort, so it will stay on the topic independently once thedissertation stage.

DescriptorsMashup Twitter Api News Mashup Web 2.0

Page 157: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

1

CAPÍTULO I

MANUAL TÉCNICO

1.1 INTRODUCCIÓN

La finalidad de este documento, es explicar las distintas tecnologías involucradas

en el desarrollo de nuestro proyecto web. Las Herramientas utilizadas son Open

Source.

Fue necesario la instalación de un Servidor de Aplicaciones Web, en nuestro sitio

utilizamos Wamp Server 2.1a, que realiza la instalación completa de los servicios de

Apache, Php y Mysql como motor de Base de datos. Ya es de nuestra responsabilidad,

el distinto administrador de base a utilizar.

Las versiones de los servicios son: Apache 2.2.17 Php 5.5.3 MySql 5.5.8 PhpMyAdmin 3.2.0.1

Existen algunos CMS para la creación de nuestro proyecto, nuestra elección fue

Joomla, versión 1.5.9, la justificación de la versión es por considerarse un producto

estable. Los distintos componentes utilizados para el proyecto web fueron bajados del

sitio oficial (www.joomla.org). El uso de herramientas Php, JavaScript, CSS, Html, en conjunto nos permite

elaborar un producto con Tecnología Ajax, haciendo que el dinamismo en la

navegación esté a la orden del día y la interacción Hombre-Máquina sea una

experiencia super agradable.

Page 158: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

2

1.2 EL FRAMEWORK

Nuestro proyecto no vio la necesidad de utilizar un Framework profesional, ya

que Joomla, posibilita la adaptación necesaria de los recursos de un Mashup de

contenidos. Aunque existen en el mercado Herramientas de soporte, tanto para

facilitar el diseño de la web, o para contruir la Lógica del Negocio. Para nuestro caso

solo fue necesario buscar o comprar las extensiones de Joomla con una funcionalidad

específica. El resultado final, lo observamos en un navegador.

1.3 ESTRUCTURA

La estructura del sitio no es tan fácil descubrirla, ya que Joomla nos facilita la

construcción de formularios, donde se incluyen opciones, aquellas opciones crean las

tablas necesarias en bases de datos, funciones y clases php, estas automáticamente

engranan entre sí, para obedecer el comportamiento esperado por el usuario.

Aclaramos que no solo creamos formularios, sino implementamos

funcionalidades necesarias en un Mashup de noticias, Ejemplo: Chat directo, Noticias

en Vivo, Blog de Noticias, Clasificados, etc. Esas funcionalidades al igual que los

formularios, de igual manera construyen las funciones y tablas necesarias para el

funcionamiento esperado. Esto es completamente transparente al usuario, es esa la

finalidad de los CMS, facilidad y cero complicaciones con la programación avanzada.

Page 159: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

3

Joomla, para su organización, gestiona:

Secciones Categorías Artículos Usuarios Módulos Plantillas Idiomas Menús Archivos Multimedia

Como todo sitio web, el proyecto se aloja en la carpeta raíz www del servidor: Gráfico No. 1 Archivos del proyecto Mashup

Elaborado por: Araceli Dávila M. La carpeta módulos, contiene los archivos que participan en cada componente,

es decir los archivos .php:

Gráfico No. 2 Módulos participantes del Mashup

Page 160: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

4

Elaborado por: Araceli Dávila M.

Para dar un ejemplo, observaremos los archivos del módulo de encuestas (Polls),

estos son los archivos:

Gráfico No. 3 Archivos pertenecientes al módulo de encuesta

Page 161: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

5

Elaborado por: Araceli Dávila M.

Si vemos la programación del archivo mod_poll.php, observaremos las funciones

y variables participantes en la funcionalidad solicitada por el usuario.

Gráfico No. 4 Archivo mod_poll.php

Elaborado por: Araceli Dávila M. El resto de la funcionalidad, se incluye en las variables, asistidas en la siguiente

sección:

Gráfico No. 5 Archivos de Inicialización de módulos por idioma

Page 162: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

6

Elaborado por: Araceli Dávila M.

El contenido del archivo es-ES.com_poll.ini, contiene las variables globales de la

funcionalidad del módulo:

Gráfico No. 6 Contenido de las Variables globales en el archivo es-

ES.com_poll.ini

Elaborado por: Araceli Dávila M.

1.4 DATOS TÉCNICOS DEL SITIO

Dominio: Adquirido a la compañía Hostgator(www.hostgator.com)Hosting: Adquirido a la compañía Hostgator(www.hostgator.com)

Características Generales:

Espacio en Disco 800 MB

Page 163: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

7

Banda Ancha 5 GIGSDominios Compartidos 1Manejador de Archivos SiSoporte 24x7 SiBackups Programados SiMysql Bases 1Cuentas FTP 1Php5 CompatibleFTP SiCuentas Pop3 IlimitadosWebMail SiPanel de Control SiphpMyAdmin SiLogs de Errores SiDirección IP Real SiMáximo de Conexiones Simultaneas a base de datos

30 usuarios concurrentes

1.5 DIAGRAMA DE COLABORACIÓN

Gráfico No. 7 Diagrama de Colaboración

Elaborador por: Araceli Dávila M.

1.6 DIAGRAMA DE FLUJO DE DATOS

1.6.1 Diagrama de Contexto

Gráfico Mo. 8 Diagrama de Contexto o Nivel cero.

Page 164: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

8

Elaborado por: Araceli Dávila M. 1.6.2 Diagrama de Nivel Superior

Diagrama No. 9 Diagrama de Nivel Superior o Nivel uno

Page 165: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

9

Elaborado por: Araceli Dávila M.

1.6.3 Diagrama de Nivel Inferior

Diagrama No.10 Diagrama de Nivel Inferior o Nivel 2

Page 166: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

10

Elaborador por: Araceli Dávila M.

1.6.4 Diagrama de Nivel Extendido

Diagrama No. 11 Diagrama de Niveles extendidos o Nivel 3

Page 167: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

11

Elaborado por: Araceli Dávila M.

1.7 DIAGRAMA DE CASOS DE USO

Page 168: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

12

Sirve como una técnica para la captura de requisitos potenciales de un nuevo sistema

o actualización de software. Cada caso de uso proporciona uno o más escenarios que

indican cómo debería interactuar el sistema con el usuario o con otro sistema para

conseguir un objetivo específico.

Caso de Uso:

1er Nivel:

Gráfico No. 12 Casos de Uso Primer Nivel

Elaborador por: Araceli Dávila M.

Caso de Uso 2do. Nivel

Page 169: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

13

Gráfico No. 13 Casos de Uso Nivel II – Elaboración de Encuestas

Elaborador por: Araceli Dávila M.

Gráfico No. 14 Casos de Uso Nivel II – Envío de Mensajes al Administrador del

Sitio

Elaborador por: Araceli Dávila M.

Gráfico No. 15 Casos de Uso Nivel II – Lectura de Clasificados

Elaborador por: Araceli Dávila M.

Gráfico No. 16 Casos de Uso Nivel II – Lectura de Noticias

Page 170: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

14

Elaborador por: Araceli Dávila M.

Gráfico No. 17 Casos de Uso Nivel II – Fotos

Elaborado por: Araceli Dávila M.

Gráfico No. 18 Casos de Uso Nivel II – Videos

Elaborado por: Araceli Dávila M.

Gráfico No. 19 Casos de Uso Nivel II – Enlace con Módulo Twitter

Page 171: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

15

Elaborado por: Araceli Dávila M.

Gráfico No. 20 Casos de Uso Nivel II – Registro en Sitio

Elaborado por: Araceli Dávila M.

Page 172: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

16

Gráfico No. 21 Casos de Uso Nivel II – Suscripción de Marcadores Dinámicos

Elaborado por: Araceli Dávila M.

Descripción de Casos de Uso

1

Caso de uso Leer Noticias

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá navegar en el sitio web, es decir

solo se mostrará el index del sitio

2

Page 173: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

17

Caso de uso Elaborar Encuestas

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permite mostrar los alcances de la

aplicación al momento de realizar la encuesta de nuestro sitio.

3

Caso de uso Ver Fotos

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá mostrar la iteracción con el

servidor en lo concerniente a las fotos.

4

Caso de uso Ver Videos

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá mostrar la iteracción con el

servidor en lo concerniente a los videos.

5

Caso de uso Leer Clasificados

Actores Usuario, Bases de Datos

Tipo Básico

Page 174: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

18

Descripción Este caso de uso me permitirá mostrar lo concerniente al link

de los avisos clasificados.

6

Caso de uso Enviar mensajes al Administrador del Sitio

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá enviar mensajes a los

administradores del sitio comenzando en el link

correspondiente.

7

Caso de uso Suscribirse a marcadores dinámicos

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá enlazar las Apis de marcadores

dinámicos en el mashup de contenido

8

Caso de uso Enlazar a Twitter/Facebook con un usuario

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá explicar el enlaze a las Apis de

Twitter con nuestro Mashup de contenido.

Page 175: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

19

9

Caso de uso Registrarse en mantentealdia.net

Actores Usuario, Bases de Datos

Tipo Básico

Descripción Este caso de uso me permitirá insertar, modificar la

información de usuarios que deseen logearse a nuestra web y

aprovechar las ventajas.

1.8 DIAGRAMA DE EVENTOS

Gráfico No. 22 Diagrama de Eventos del Sitio

Page 176: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

20

Elaborado por: Araceli Dávila

1.9 MODELO ENTIDAD RELACIÓN

Gráfico No. 23 MER Sitio Mashup

Page 177: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

21

Elaborado por: Araceli Dávila M.

1.10 DICCIONARIO DE DATOS

Table jos_categories (Categorías del Sitio)

Page 178: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

22

Este objeto guarda las distintas categorías que se pueden crear en una página web

Joomla.

Joomla es un sistema de gestión de contenidos y entre sus principales virtudes está la

de permitir editar el contenido de un sitio web de manera sencilla.

(1/25)

Columns

Key Column Name Datatype Not Null Default Comment

PK id INT(11) Yes

parent_id INT(11) Yes '0'

title VARCHAR(

255)

Yes ''

name VARCHAR(

255)

Yes ''

alias VARCHAR(

255)

Yes ''

image VARCHAR(

255)

Yes ''

section VARCHAR(

50)

Yes ''

image_position VARCHAR(

30)

Yes ''

description TEXT Yes

Page 179: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

23

published TINYINT(1) Yes '0'

checked_out INT(11) Yes '0'

checked_out_time DATETIME Yes '0000-

00-00

00:00:0

0'

editor VARCHAR(

50)

No NULL

ordering INT(11) Yes '0'

access TINYINT(3) Yes '0'

count INT(11) Yes '0'

params TEXT Yes

Table jos_categorías = {id} + {parent_id} + { title} + {name} + alias + image +

section + {image_position} + descripción + Published + {checked_out} +

{ checked_out_time} + editor + {ordering} + {acess} + {count} + params.

id = {Clave primaria para el registro}, **Asignada por el servidor.

parent_id = {0}

title = {Titulo de la categoría del sitio web }

Name = {Nombre de la categoría del sitio web}

Alias = **Alias del titulo del sitio web

Image = **Imagen de la categoria del sitio web

Section = **Seccion de la categoria del sitio web

Page 180: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

24

image_position = **La posición de la imagen de la categoria del sitio web (left )

Description = **La descripción de la imagen de la categoria del sitio web,

Published = **Lo publicado de la categoria por los usuarios del sitio web

checked_out = **Revisado fuera de la categoria del sitio web {0 }

checked_out_time = ** Revisado fuera de tiempo, valor por default {0}

Editor = **Editor de la categoria del sitio web

Ordering = **Orden de la categoria del sitio web, valor por default {1}

Access = **El acceso de la categoria del sitio web, valor por default {0 }

Count = **El contador de las categorias del sitio web, valor por default {0}

Params = **Los parámetros de la categoria del sitio web

carácter válido = [ A-Z | a-z | ‘ |

Table jos_components (Componentes del Sitio)

Este objeto guarda los distintos componentes usados para el sitio web, Ejemplo

calendario, Blogs, encuestas, Módulo Validador de Idioma, entre otros.

(2/25)

Columns

Key Column Name Datatype Not Null Default Comment

PK Id INT(11) Yes

Name VARCHAR(50) Yes ''

Page 181: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

25

Link VARCHAR(255

)

Yes ''

menuid INT(11) Yes '0'

parent INT(11) Yes '0'

admin_menu_link VARCHAR(255

)

Yes ''

admin_menu_alt VARCHAR(255

)

Yes ''

option VARCHAR(50) Yes ''

ordering INT(11) Yes '0'

admin_menu_img VARCHAR(255

)

Yes ''

Iscore TINYINT(4) Yes '0'

params TEXT Yes

enabled TINYINT(4) Yes '1'

Table jos_components = { id} + name + link + {menuid} +{parent} +

admin_menu_link + admin_menu_alt + option + ordering + admin_menu_imag +

iscore + params + enabled.

Id = **Clave primaria de la tabla de componentes del sitio web

Name = **Nombre de los componentes del sitio web

link = **Enlace al siguiente nivel de opciones

menuid = {0}

Page 182: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

26

parent = {0}

admin_menu_link = **Enlace a las opciones que constan en el menu

admin_menu_alt = ** Gestion de banderas de los componentes del sitio Web

Option = **Opciones de los componentes del sitio web, banderas comunes

ordering = Niveles o escalas de los componentes del sitio web, por default {0}

admin_menu_imag = La admisión del menú de imagen

iscore = {0}

params = Los parámetros de los componentes del sitio web, pueden ser algunos.

Enabled = Habilitado a los componentes del sitio web (1)

carácter válido = [ A-Z | a-z | ‘ |

Table *jos_comprofiler (Componentes instalados del Comunity Builder, para nuestro

caso es el componente de Twitter)

Este objeto guarda la relación principal del componente de Twitter, donde está la

fotografía del Avatar del usuario, y la ip de acceso.

El twitter es unade las redes sociales más famosas en la actualidad la cual sirve para

estar en contacto con familiares, amigos, establecer negocios entre otras funciones.

Page 183: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

27

Avatar es un campo que se usan en las tablas de la base de datos con el fin de realizar

modifiaciones a las fotografías de las personas que visitan el sitio web.

La ip de acceso es una configuración que realiza el administrador del sitio con la

finalidad de establecer y dar todos los permisos requeridos a las personas que

ingresan al sitio web.

(3/25)

Columns

Key Column Name Datatype Not

Null

Default Comment

PK id INT(11) Yes '0'

firstname VARCHAR(10

0)

No NULL

middlename VARCHAR(10

0)

No NULL

lastname VARCHAR(10

0)

No NULL

hits INT(11) Yes '0'

message_last_sen

t

DATETIME Yes '0000-00-

00

00:00:00'

Page 184: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

28

message_number

_sent

INT(11) Yes '0'

avatar VARCHAR(25

5)

No NULL

avatarapproved TINYINT(4) Yes '1'

approved TINYINT(4) Yes '1'

confirmed TINYINT(4) Yes '1'

lastupdatedate DATETIME Yes '0000-00-

00

00:00:00'

registeripaddr VARCHAR(50

)

Yes ''

cbactivation VARCHAR(50

)

Yes ''

acceptedterms TINYINT(1) Yes '0'

twitter_username VARCHAR(25

5)

No NULL

twitter_userid BIGINT(20) No NULL

twitter_previous_

userid

BIGINT(20) No NULL

twitter_lastupdate DATETIME Yes '0000-00-

00

00:00:00'

Page 185: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

29

jos_comprofiler=

id+{firstname}+{middlename}+{lastname}+hits+message_last_sent+

+message_number_sent+avatar+{avatarapproved}+{approved}+

+{confirmed}+lastupdatedate+registeripaddr+cbactivation+ +{acceptedterms}

+twitter_username+twitter_userid+ +{twitter_previous_userid}+twitter_lastupdate

Id=**Valor Auto incremental dado por el servidor

firstname= {carácter válido}

middlename= {carácter válido}

lastname={carácter válido}

hits=**Número de Vistas

message_last_sent=**Fecha del ultimo mensaje de Twitter enviado

message_number_sent=**Cantidad de Twitter mensajes enviados

avatar=**Nombre del achivo de Fotografía del usuario de Twitter

avatarapproved={1}

approved={1}

confirmed={1}

lastupdatedate=**Fecha de última actualización

registeripaddr=**Registro de la Ip del visitante

cbactivation=**Activación del Community Builder

acceptedterms={0}

twitter_username=**Usuario de Twitter

Page 186: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

30

twitter_userid=**Id de Twitter

twitter_previous_userid={NULL}

twitter_lastupdate=**Última fecha de actualización

carácter válido = [ A-Z | a-z | ‘ |

Table *jos_comprofiler_fields (Campos de las tablas del sitio)

Esta tabla guarda información de los campos que participan en el sitio web, así como

el tipo de uso y longitud de campos.

(4/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK fieldid INT(11) Yes

name VARCHAR(50) Yes ''

tablecolum

ns

TEXT Yes

table VARCHAR(50) Yes '#__comprof

iler'

title VARCHAR(255) Yes ''

description MEDIUMTEXT Yes

type VARCHAR(50) Yes ''

Page 187: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

31

maxlength INT(11) No NULL

size INT(11) No NULL

required TINYINT(4) No '0'

tabid INT(11) No NULL

ordering INT(11) No NULL

cols INT(11) No NULL

rows INT(11) No NULL

value VARCHAR(50) No NULL

default MEDIUMTEXT No NULL

published TINYINT(1) Yes '1'

registration TINYINT(1) Yes '0'

profile TINYINT(1) Yes '1'

displaytitle TINYINT(1) Yes '1'

readonly TINYINT(1) Yes '0'

searchable TINYINT(1) Yes '0'

calculated TINYINT(1) Yes '0'

sys TINYINT(4) Yes '0'

pluginid INT(11) Yes '0'

params MEDIUMTEXT No NULL

Jos_comprofiler_fields= { fielded} + name + table_columns + table + title +

description + type + maxlenght + size + recorred + tableid + ordering + cols + rows +

value + default + Published + registration + profile + displyatitle + readonly +

searchable + calculated + sys + pluginid + paramas.

Page 188: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

32

fieldid = Clave primaria de la tabla

Name = ** Nombre del campo

table_columns = **Información de las columnas

table = **Nombre del grupo de tabla perteneciente

Title = *Titulo de la tabla a la que se hace referencia

Description = **Descripción a la tabla a la que se hace referencia, para efectos del

componente

Type = **Tipo

Maxlenght = **Longitud Máxima

size = **Tamaño, default Null

Requerid= **Requerido

Tableid = **Identificación de la tabla

Ordering = **Orden

Cols = **Columnas Null

Rows = **Filas Null

value = **Valores Null

default = **Por defecto {0}

Published = **Publicaciones (1)

registration = **Registro

Page 189: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

33

Profile = **Perfil

Displaytitle = **Muestra el titulo, por default (1)

Readonly = **Solo para lectura {0}

Searchable = **Búsqueda disponible {0}

calculated = **Campo Calculado {0}

sys = **Campos de uso del Servidor

Pluginid = **Campos de uso del Servidor

Paramas = **Parametros, default Null

carácter válido = [ A-Z | a-z | ‘ |

Table *jos_comprofiler_plugin (Componentes adicionales que funcionan con el

Comunity Builder)

En este objeto se almacenan los componentes (pluggins) adicionales, para el

funcionamiento exclusivo de adicionales para los componentes en mención. Ejemplo:

Twiter Tab, CB Twitter.

Llamese Plugin, a un tipo de archivo en especial que se puede anexar a otro para

aumentar la funcionalidad de un objeto inesperado.

EL CB Twitter, es el componente instalado actualmente para hacer el Mashup en la

parte correspondiente del Twitter, debe su nombre a Comunity Builder Twitter.

Page 190: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

34

El componente Twitter Tab, muestra los tweets en una determinada sección de la

página, asi denominada Tab.

(5/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(11) Yes

name VARCHAR(

100)

Yes ''

element VARCHAR(

100)

Yes ''

type VARCHAR(

100)

No ''

folder VARCHAR(

100)

No ''

ordering INT(11) Yes '0'

published TINYINT(3) Yes '0'

iscore TINYINT(3) Yes '0'

client_id TINYINT(3) Yes '0'

checked_out INT(11) Yes '0'

checked_out

_time

DATETIME Yes '0000-00-00

00:00:00'

Page 191: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

35

params TEXT Yes

jos_comprofiler_plugin = { id} + {name} + element + type + folder + ordering +

Published + {iscore} + {client_id} + {checked_out }+{ checked_out_time} +

{ params}

Id = {Identificación del pk para la tabla}

Name = {Nombre}

element = **Elemento

Type = **Tipo (usuario)

Folder = **Carpetas

Ordering = **Orden de presentación del plugin (1)

Published = **Campo publicado(1)

iscore = {1}

Client _id = {0}

checked_out = **Chequeado fuera del proceso {0}

checked_out_time =** Chequeado fuera del proceso {0}

Params = **Parametros , pueden ser algunos

carácter válido = [ A-Z | a-z | ‘ |

Page 192: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

36

Table *jos_comprofiler_sessions (Manejador de sesiones en los components de

Community Builder)

Esta tabla guarda la información relativa a la sesión de los usuarios, para su

respectivo control.

(6/25)

Columns

Key Column Name Datatype Not

Null

Default Comment

username VARCHAR(50) Yes ''

userid INT(11) Yes '0'

ui TINYINT(4) Yes '0'

incoming_ip VARCHAR(39) Yes ''

client_ip VARCHAR(39) Yes ''

PK session_id VARCHAR(33) Yes ''

session_data MEDIUMTEXT Yes

expiry_time INT(14) Yes '0'

jos_comprofiler_sessions = {username} + userid + {ui} + incoming_ip + client_ip +

session_id + session_data + expiry_time.

Username = **Nombre del usuario

Page 193: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

37

userid = **Identificación del usuario {0}

Ui ={1}

incoming_ip = **Dirección Ip públicas de los usuarios que interactúan con el módulo

client_ip = **Dirección Ip del usuario que se conecta al sitio web

session_id = **identificación de sesiones

session_data = **Sesión otorgada por el servidor

expiry_time = **tiempo de expiración

carácter válido = [ A-Z | a-z | ‘ |

Table *jos_comprofiler_tabs (Publicaciones de secciones de los componentes).

Esta tabla almacena los permisos a las publicaciones correspondientes por sección,

para ser publicados o no. Ejemplo: My Tweets, que son los mensajes cortos enviados

desde Twitter, o My Latest Tweets, que son el registro y publicación de los mensajes

cortos enviados con anterioridad. Almacenándose desde el ultimo a al primero.

(7/25)

Columns

Key Column Name Datatype Not Null Default Comment

PK tabid INT(11) Yes

Page 194: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

38

title VARCHAR(5

0)

Yes ''

description TEXT No NULL

ordering INT(11) Yes '0'

ordering_register INT(11) Yes '10'

width VARCHAR(1

0)

Yes '.5'

enabled TINYINT(1) Yes '1'

pluginclass VARCHAR(2

55)

No NULL

pluginid INT(11) No NULL

fields TINYINT(1) Yes '1'

params MEDIUMTE

XT

No NULL

sys TINYINT(4) Yes '0'

displaytype VARCHAR(2

55)

Yes ''

position VARCHAR(2

55)

Yes ''

useraccessgroupid INT(9) Yes '-2'

jos_comprofiler_tabs = { tabid }+ title + description + ordering + ordering_register +

{width} + {enabled} +{ pluginclass} + pluginid + fields + params + {sys} +

displaytype + position + useraccessgroupid.

Page 195: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

39

tabid = **Clave primaria para identificar cada transacción

title = **titulo

Descripción =** Descripción

Ordering =** Orden de presentación del Tab

ordering_register =** Registro de ordenes

Width = {Ancho}, default (1)

Enabled = **Habilitado, default {1}

Pluginclass = {Proceso de Servidor}

pluginid = **Identificación del plugin

Fields = **Campos (1)

Params = **Parámetros Null

Sys ={Proceso de Servidor}

Displaytype = **Mostrando tipo

Position = **Posición

Useraccessgroupid = **Acceso al grupo de identificación de usuarios

carácter válido = [ A-Z | a-z | ‘ |

Table jos_content.

Tabla de Contenidos, con respecto a todos los datos sin importar categorización.

Page 196: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

40

(8/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(11) Yes

title VARCHAR(

255)

Yes ''

alias VARCHAR(

255)

Yes ''

title_alias VARCHAR(

255)

Yes ''

introtext MEDIUMT

EXT

Yes

fulltext MEDIUMT

EXT

Yes

state TINYINT(3) Yes '0'

sectionid INT(11) Yes '0'

mask INT(11) Yes '0'

catid INT(11) Yes '0'

created DATETIME Yes '0000-00-00

00:00:00'

created_by INT(11) Yes '0'

created_by_ali

as

VARCHAR(

255)

Yes ''

Page 197: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

41

modified DATETIME Yes '0000-00-00

00:00:00'

modified_by INT(11) Yes '0'

checked_out INT(11) Yes '0'

checked_out_t

ime

DATETIME Yes '0000-00-00

00:00:00'

publish_up DATETIME Yes '0000-00-00

00:00:00'

publish_down DATETIME Yes '0000-00-00

00:00:00'

images TEXT Yes

urls TEXT Yes

attribs TEXT Yes

version INT(11) Yes '1'

parentid INT(11) Yes '0'

ordering INT(11) Yes '0'

metakey TEXT Yes

metadesc TEXT Yes

access INT(11) Yes '0'

hits INT(11) Yes '0'

metadata TEXT Yes

jos_content = { id} + title + alias + title_alias + introtext + fulltext + state +

section_id +{ maks} + catid + created + created_by + created_by_alias + modified

Page 198: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

42

+ modified_by + {checked_out} + checked_out_time + {publish_out} +

{ publish_down} + images + urls + attribs + version + parentid + ordering + metakey

+ metadesc + {access} + hits + metadata.

Id = **Clave primaria de tabla

Title = **titulo del contenido del sitio web

Aias = **Alias del titulo de contenido del sitio web

title_alias =** Titulo de Alias del contenido del sitio web

Introtext = **Texto introductorio

Fulltext = **Texto normal

State = **Estado del contenido

section_id = **Identificación de secciones (1)

Maks = {0}

Catid = **Id de categoría

create = **Fecha de creación

created_by =** Creado por

created_by_alias = ** alias del usuario

Modified =** Modificado

modified_by = **Modificado por

checked_out = {0}

checked_out_time = **Publicado en la fecha

Page 199: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

43

publish_out ={0}

publish_down ={0}

images = **Imágen adjunta

urls = **Urls

attribs = **Atributos

Version = **Versión

parentid = {0}

Ordering =** Ordenando {0}

metakey ={Para usos del servidor}

metadesc ={Para usos del servidor}

Access = **Aceso {0}

Hits = **Hits

metadata ={Para usos del servidor}

Table jos_content_frontpage (Contenido de la Cabezera de la Página, es decir la parte

alta de la página.

Se usa en caso de tener algún Banner en la página. Llamese Banner a un anuncio

rectangular ubicado muchas veces en la parte superior de la página.

(9/25)

Columns

Page 200: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

44

Key Column Name Datatype Not Null Default Comment

PK content_id INT(11) Yes '0'

ordering INT(11) Yes '0'

Table jos_content_frontpage = { content_id }+ { ordering }

Content_id = ** { Primary Key para identificar el registro }

Ordering= ** { Orden que asigna el servidor a un registro }

Table jos_content_rating (Tabla del contenido del rating del contenido)

Esta tabla guarda la información de los artículos mas visitados, y la información

relativa a ello.

(10/25)

Columns

Key Column Name Datatype Not Null Default Comment

PK content_id INT(11) Yes '0'

rating_sum INT(11) Yes '0'

rating_count INT(11) Yes '0'

lastip VARCHAR(50) Yes ''

jos_content_rating = { content_id } + rating_sum + rating_count + { lastip}

Page 201: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

45

Content_id = { Identificación de contenido }

Rating_sum = Clasificando la suma

Rating_count = Clasificando el conteo

Lastip = { Ultima dirección ip }

Table jos_groups (Tabla de Grupos del Sitio, entiéndase grupo por agrupación de

elementos con o sin afinidad dentro un lugar).

(11/25)

Columns

Key Column Name Datatype Not Null Default Comment

PK id TINYINT(3) Yes '0'

name VARCHAR(50) Yes ''

jos_groups = { id } + { name}

Id = { Identificación de los grupos del sitio web } {0}

Name = { Nombre de los grupos del sitio web }

Table jos_hwdvidscategories (Categorías de Videos)

Page 202: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

46

Esta tabla almacena información acerca de las subdivisiones de la página web, es

decir categorías Al sitio se puede subir videos con extensiones .mpg, .3gp, .wmv y

mp4, No existe Menu de Videos, solo una sección dedicada a subir y comentar los

mismos.

(12/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(50) Yes

parent INT(50) Yes '0'

category_name VARCHAR(

250)

No NULL

category_descr

iption

TEXT No NULL

date DATETIME Yes '0000-00-00

00:00:00'

access_b_v TINYINT(1

)

Yes '0'

access_u_r VARCHAR(

7)

Yes 'RECURSE'

access_v_r VARCHAR(

7)

Yes 'RECURSE'

access_u INT(11) Yes '-2'

access_lev_u VARCHAR( Yes '0,1'

Page 203: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

47

250)

access_v INT(11) Yes '-2'

access_lev_v VARCHAR(

250)

Yes '0,1'

thumbnail TEXT Yes

num_vids INT(50) Yes '0'

num_subcats INT(50) Yes '0'

order_by VARCHAR(

15)

Yes '0'

ordering INT(50) Yes '0'

checked_out INT(11) Yes '0'

checked_out_ti

me

DATETIME Yes '0000-00-00

00:00:00'

published TINYINT(1

)

Yes '0'

jos_hwdvidscategories = { id } + { parent } + category_name +

category_description + date + { access_b_v } + { access_u_r } + { access_v_r } +

{ access_u } + { access_lev_u } + { access_v } + { {access_lev_v } +

{ thumbnail } + num_vids + { num_subcats } + { order_by } + ordering +

{ checked_out } + { checked_out_time } + published.

Id = Identificación de la categoría de videos del sitio web

Parent = **En el caso de guardar relación de dos videos o mas.

Page 204: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

48

category_name = Nombre de categorías

category_description = Descripción de categorías

Date = Fechas

access_b_v = { Iteración del servidor }

access_u_r = { Iteración del servidor }

access_v_r = { Iteración del servidor }

access_u = { Iteración del servidor }

access_lev_u = { Iteración del servidor }

access_v ={ Iteración del servidor }

access_lev_v ={ Iteración del servidor }

thumbnail = { Iteración del servidor }

num_vids = Numero de videos

num_subcats = {0}

order_by = Ordenar por {0}

Ordering = ordenes

checked_out = Revisa el video después de haber sido sido subido por el usuario {0}

checked_out_time = {0}

published = Publicaciones (1)

Table jos_jcomments (Tabla de comentarios del sitio)

Page 205: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

49

Esta tabla esta creada con el único fin de que las personas que ingresen al sitio web y

deseen emitir algún comentario se puedan guardar, esto con la aprobación del user

Administrador.

(13/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(11) Yes

parent INT(11) Yes '0'

path VARCHAR(

255)

Yes ''

level TINYINT(1) Yes '0'

object_id INT(11) Yes '0'

object_group VARCHAR(

255)

Yes ''

object_param

s

TEXT Yes

Page 206: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

50

lang VARCHAR(

255)

Yes ''

userid INT(11) Yes '0'

name VARCHAR(

255)

Yes ''

username VARCHAR(

255)

Yes ''

email VARCHAR(

255)

Yes ''

homepage VARCHAR(

255)

Yes ''

title VARCHAR(

255)

Yes ''

comment TEXT Yes

ip VARCHAR(

15)

Yes ''

date DATETIME Yes '0000-00-00

00:00:00'

isgood SMALLINT

(5)

Yes '0'

ispoor SMALLINT

(5)

Yes '0'

published TINYINT(1) Yes '0'

subscribe TINYINT(1) Yes '0'

source VARCHAR(

255)

Yes ''

Page 207: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

51

source_id INT(11) Yes '0'

checked_out INT(11) Yes '0'

checked_out_

time

DATETIME Yes '0000-00-00

00:00:00'

editor VARCHAR(

50)

Yes ''

jos_jcomments = { id } + { parent }+ { path }+ { level } + object_id + object_group

+ object_params + lang + { userid } + { name } +{ username } + email + homepage

+ { title} + comment + ip + date + { Isgood} + { ispoor }+ Published + { subscribe

} + source + { source_id } + { checked_out } + { checked_out_time } + editor

Id = Identificación de los comentarios del sitio web

Parent = {0}

Path = { Ruta de los comentarios del sitio web } {0}

Level = { Nivel de los comentarios del sitio web } {0}

object_id = Identificación del objeto de los comentarios del sitio web (1)

object_group = Grupo de objeto de los comentarios del sitio web

object_params = Objeto de parametros de los comentarios del sitio web

Lang = ** Lenguaje manejado en el comentario

Userid = { Identificación del usuario de los comentarios del sitio web }

Name = { Nombre de los comentarios del sitio web }

Username = { Nombre de usuario de los comentarios del sitio web }

Page 208: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

52

Email = Correo en el caso de que el usuario decida ingresarlo al sitio web

Homepage = Pagina de Inicio del sitio web

Title = { Titulo del sitio web }

Comment = Comentario del sitio web

Ip = Direccion Ip del sitio web

Date = Fecha del sitio web

isgood = { Es bueno } {0}

Ispoor = { Es pobre } {0}

Published = Publicaciones (1)

Subscribe = Suscripciones {0}

Source = fuente

source_id = { Identificación de la fuente } {0}

checked_out = {Interacción con el servidor ]{0}

checked_out_time = {Interacción con el servidor } {0}

Editor = Editor

Table jos_jcomments_settings (Tabla de configuración del comentario)

Es decir información relevante al comentario de un referido video, imagen, o noticia.

Llamese referido al comentario de un usuario.

Page 209: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

53

(14/25)

Columns

Key Column

Name

Datatype Not Null Default Comment

PK Component VARCHAR(50) Yes ''

PK Lang VARCHAR(20) Yes ''

PK Name VARCHAR(50) Yes ''

Value TEXT Yes

jos_jcomments_settings = { component } + { lang } + { name} + value

Component = { Componentes del sitio web y clave primaria }

Lang = { Lenguaje Wapa y clave primaria }

Name = { Nombres del sitio web y clave primaria }

Value = Valores del sitio web

Table jos_menu (Tabla de Menus)

Información relevante a los menus del sitio web.

(15/25)

Columns

Page 210: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

54

Key Column

Name

Datatype Not

Null

Default Comment

PK Id INT(11) Yes

Menutype VARCHAR(

75)

No NULL

Name VARCHAR(

255)

No NULL

Alias VARCHAR(

255)

Yes ''

Link TEXT No NULL

Type VARCHAR(

50)

Yes ''

Published TINYINT(1) Yes '0'

Parent INT(11) Yes '0'

Componenti

d

INT(11) Yes '0'

Sublevel INT(11) No '0'

Ordering INT(11) No '0'

checked_ou

t

INT(11) Yes '0'

checked_ou

t_time

DATETIME Yes '0000-00-00

00:00:00'

Pollid INT(11) Yes '0'

browserNav TINYINT(4) No '0'

Access TINYINT(3) Yes '0'

Utaccess TINYINT(3) Yes '0'

Page 211: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

55

Params TEXT Yes

Lft INT(11) Yes '0'

Rgt INT(11) Yes '0'

jos_menu = { id } + { menutype} + {name }+ { alias } + link + type + Publisher +

{ parent } + componentid + { sublevel } + ordering +{ checked_out } +

{ checked_out_time } + { pollid } + { browserNav }+ { access } + { utaccess } +

params + { lft } +{ rgt }

Id = { Identificación del menu del sitio web }

Menutype = { Menu principal del sitio web }

Name = { Nombre del sitio web }

Alias = { Alias del nombre del sitio web }

Link = **La Url a donde te llevará el sitio en caso de hacer click.

Type = Tipo

Published = Publicaciones (1)

Parent ={0}

Componentid = { Identificaciones de componentes }

Sublevel = {0}

Ordering = Órdenes

checked_out = {0}

checked_out_time = {0}

Pollid ={0}

Page 212: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

56

browserNav ={0}

access = Acceso {0}

Utaccess = {Valores asignados por el servidor }

Params = Parámetros

Lft = Izquierda {0}

Rgt = Derecha {0}

Table jos_menu_types (Tabla de Tipos de Menús)

En esta tabla se encontraran los diferentes tipos de menú que se encontraran en el

sitio web.

(16/25)

Columns

Key Column

Name

Datatype Not Null Default Comment

PK Id INT(10) Yes

Menutype VARCHAR(75) Yes ''

Title VARCHAR(255) Yes ''

Description VARCHAR(255) Yes ''

jos_menu_types ={ id }+ { menutype} + { title} +{ description }

Page 213: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

57

Id = { Identificación del tipo de menú del sitio web }

Menutype = { Tipo de menú del sitio web }

Title = { Titulo del sitio web }

Description = { Descripción del sitio web }

Table jos_modules (Tabla de Módulos)

Son aquellos que se encuentran instalados para el efecto que queramos dar a nuestro

sitio. En el caso de no tenerlo, se lo debe instalar previamente.

(17/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(11) Yes

title TEXT Yes

content TEXT Yes

ordering INT(11) Yes '0'

position VARCHAR(

50)

No NULL

checked_out INT(11) Yes '0'

checked_out_ti

me

DATETIME Yes '0000-00-00

00:00:00'

published TINYINT(1) Yes '0'

Page 214: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

58

module VARCHAR(

50)

No NULL

numnews INT(11) Yes '0'

access TINYINT(3) Yes '0'

showtitle TINYINT(3) Yes '1'

params TEXT Yes

iscore TINYINT(4) Yes '0'

client_id TINYINT(4) Yes '0'

control TEXT Yes

jos_modules = { id } + { title } + content + ordering + position + { checked_out} +{

checked_out_time} + Published + module + { numnews } + { access } +

showtitle + params + iscore + { client_id } + control }

Id = { Identificación de los módulos del sitio web }

Title = { Titulo de los módulos los sitio web }

Content = Contenido de los módulos del sitio web

Ordering = Órdenes de los módulos del sitio web

Position = Posiciones de los módulos del sitio web

checked_out = {0}

checked_out_time = { 0}

Published = Publicaciones de los módulos del sitio web (1)

Module = Módulos del sitio web

Page 215: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

59

Numnews = { Numero de noticias del sitio web } {0}

Access = { Acceso de los módulos del sitio web } {0}

showtitle = Mostrando el titulo (1)

Params = Parámetros

Iscore = (1)

client_id = { Identificación del cliente } {0}

Control = Control

Table jos_phocagallery (Tabla de Información de Fotografías)

Aquí podemos encontrar todo tipo de información referente a la galeria de fotografías

es decir decir, título, alias, descripción. Fecha, tamaño de la imagen, etc.

(18/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

PK id INT(11) Yes

catid INT(11) Yes '0'

sid INT(11) Yes '0'

title VARCHAR( Yes ''

Page 216: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

60

250)

alias VARCHAR(

255)

Yes ''

filename VARCHAR(

250)

Yes ''

description TEXT No NULL

date DATETIME Yes '0000-00-00

00:00:00'

hits INT(11) Yes '0'

latitude VARCHAR(

20)

Yes ''

longitude VARCHAR(

20)

Yes ''

zoom INT(3) Yes '0'

geotitle VARCHAR(

255)

Yes ''

videocode TEXT No NULL

vmproductid INT(11) Yes '0'

imgorigsize INT(11) Yes '0'

published TINYINT(1) Yes '0'

approved TINYINT(1) Yes '0'

checked_out INT(11) Yes '0'

checked_out_

time

DATETIME Yes '0000-00-00

00:00:00'

ordering INT(11) Yes '0'

params TEXT No NULL

Page 217: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

61

metakey TEXT No NULL

metadesc TEXT No NULL

extlink1 TEXT No NULL

extlink2 TEXT No NULL

extid VARCHAR(

255)

Yes ''

extl VARCHAR(

255)

Yes ''

extm VARCHAR(

255)

Yes ''

exts VARCHAR(

255)

Yes ''

exto VARCHAR(

255)

Yes ''

extw VARCHAR(

255)

Yes ''

exth VARCHAR(

255)

Yes ''

jos_phocagallery = { id } + { catid } + { sid } + { title } +{ alias } + fílenme +

description + date + hits + latitude + longitude + zoom + geotitle + videocode +

{ vmproductid } + imgorigsize + published + approved + { checked_out } +

{ checked_out_time } + ordering + {params }+ { metakey }+ { metadesc } +

{ extlink1 } + { exlink2 } + { extid } + { extl } + { extm } + exts + { exto } +

{ extw } +{ exth }

Page 218: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

62

Id = { Identificación de la galería de fotos del sitio web }

Catid = { Asignado por el servidor } ( 1)

Sid = {0}

Title = { Titulo de la galería de fotos del sitio web }

Alias = { Alias de la galería de fotos del sitio web }

Filename = Nombre del archivo de la galería de fotos del sitio web

description = Descripción de la galería de fotos del sitio web

Date = Fecha de la galería de fotos del sitio web

Hits = {0}

Latitude = Latitud de la galería de fotos del sitio web

Longitude = Longitud de la galería de fotos del sitio web

Zoom = Zoom de la galería de fotos del sitio web

Geotitle = Información geográfica de la foto del sitio web

Videocode = Codigo del video Null

vmproductid = {0}

Imgorigsize = Tamaño original de la imagen

Published = Publicación de la galería de fotos del sitio web (1)

Approved = (1)

checked_out = {0}

Page 219: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

63

checked_out_time = {0}

Ordering = Órdenes de la galería de fotos del sitio web (1)

Params = {Interacción por el servidor } Parámetros Null

Metakey = {Interacción por el servidor } Null

metadesc = {Interacción por el servidor } Null

extlink1 = {Interacción por el servidor } Null

Extlink2 = {Interacción por el servidor } Null

Extid = {Interacción por el servidor }

Extl = {Interacción por el servidor }

Extm = {Interacción por el servidor }

Exts = Extensiones de la galería de fotos del sitio web

Exto = {Interacción por el servidor }

Extw = {Interacción por el servidor }

Exth ={Interacción por el servidor }

Table jos_poll_data (Tabla de Preguntas de Encuestas)

Esta tabla guarda información solo de las preguntas, en caso de publicar una

encuesta.

(19/25)

Columns

Page 220: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

64

Key Column Name Datatype Not Null Default Comment

PK id INT(11) Yes

pollid INT(11) Yes '0'

text TEXT Yes

hits INT(11) Yes '0'

jos_poll_data = { id } + { pollid } + text + hits

Id = { Identificación de los datos de las encuestas y clave primaria del sitio web }

Pollid = { Id de la encuesta del sitio web }

Text = Texto de los datos del las encuestas del sitio web

Hits = Número de veces en que se ha realizado la encuesta

Table jos_poll_date (Tabla de respuestas de encuestas)

En esta tabla se almacenará el banco de respuestas, sin importar el orden de las

preguntas.

(20/25)

Columns

Key Column Datatype Not Default Comment

Page 221: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

65

Name Null

PK id BIGINT(2

0)

Yes

date DATETI

ME

Yes '0000-00-00

00:00:00'

vote_id INT(11) Yes '0'

poll_id INT(11) Yes '0'

jos_poll_date = { id }+ date + vote_id + {poll_id }

Id = { Identificación de las encuestas por fecha del sitio web }

Date = Fechas de las encuestas del sitio web

Vote_id = Identificación de Votos de las encuestas por fecha del sitio web

Poll_id = { identificación de las encuesta del sitio web }

Table jos_polls (Tabla de Información de la encuesta)

Esta tabla almacena, la información estadística de la encuesta, es decir los votos, la

fecha del alta=fecha en que si el usuario Administrador da el ok para subirla al sitio

en producción a la publicación.

(21/25)

Columns

Key Column

Name

Datatype Not

Null

Default Comment

Page 222: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

66

PK id INT(11) Yes

title VARCHAR(

255)

Yes ''

alias VARCHAR(

255)

Yes ''

voters INT(9) Yes '0'

checked_out INT(11) Yes '0'

checked_out

_time

DATETIME Yes '0000-00-00

00:00:00'

published TINYINT(1) Yes '0'

access INT(11) Yes '0'

lag INT(11) Yes '0'

jos_polls = { id } + { title } + { alias }+ voters + { checked_out } +

{ checked_out_time } + Published + { access } + lag.

Id = { Identificación de las encuestas del sitio web}

Title = { Título de las encuestas del sitito web }

Alias = { Alias del título de la pregunta de la encuesta del sitio web }

Voters = Votantes de las encuestas del sitio web

checked_out = {0}

checked_out_time = {0}

Published = Publicaciones de las encuestas (1)

Page 223: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

67

Access = Acceso de las encuestas del sitio web [0}

Lag = Es asignado por el servidor

Table jos_sections (Tabla de secciones)

En Joomla se manejan también Secciones a las subdivisiones de contenidos, esta tabla

almacena los nombres de las mismas para el respectivo control independiente.

(22/25)

Columns

Key Column Name

Datatype Not Null

Default Comment

PK Id INT(11) Yes

Title VARCHAR(255)

Yes ''

Name VARCHAR(255)

Yes ''

Alias VARCHAR(255)

Yes ''

Image TEXT Yes

Scope VARCHAR(50)

Yes ''

image_position

VARCHAR(30)

Yes ''

Description TEXT Yes

Published TINYINT(1) Yes '0'

checked_out INT(11) Yes '0'

checked_out_time

DATETIME Yes '0000-00-00 00:00:00'

Ordering INT(11) Yes '0'

Page 224: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

68

Access TINYINT(3) Yes '0'

Count INT(11) Yes '0'

Params TEXT Yes

jos_sections = { id } + { title } +{ name } + { alias } + image + scope +

image_position + description + Published + { checked_out } +

{ checked_out_time } + ordering + { access } + count + params.

Id = { Identificación de las secciones del sitio web }

Title = { Título de las secciones del sitio web }

Name = { Nombre de las secciones del sitio web }

Alias = { Alias del campo del titulo de las secciones }

Image = Imagen de las secciones del sitio web

Scope = Contenido de las secciones del sitio web

image_position = Posición de la imagen

description = Descripción de las secciones del sitio web

Published = Publicaciones de las secciones del sitio web

checked_out = {0}

checked_out_time = {0}

Ordering = Órdenes de las secciones del sitio web

Access = Acceso de las secciones del sitio web {0}

Count = Contadores de las secciones del sitio web

Page 225: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

69

Params = Parámetros de las secciones del sitio web

Table jos_session (Tabla de Sesiones)

Este objeto almacena toda la información necesaria con respecto a la sesión de un

usuario “x”.

Se procede a dar la denominación de usuario “x” a cualquier tipo de persona que

ingrese al sitio Web.

(23/25)

Columns

Key Column Name

Datatype Not Null Default Comment

Username VARCHAR(150) No ''

Time VARCHAR(14) No ''

PK session_id VARCHAR(200) Yes '0'

Guest TINYINT(4) No '1'

Userid INT(11) No '0'

Usertype VARCHAR(50) No ''

Gid TINYINT(3) Yes '0'

client_id TINYINT(3) Yes '0'

Data LONGTEXT No NULL

Page 226: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

70

jos_session = { username } + time +{ session_id } + guest + { userid } +

{ usertype} + gid +{ client_id } + { data }

Username = { Nombre de Usuario }

Time = Tiempo

Session_id = { Identificación de sesiones y clave primaria }

Guest = (1)

Userid = { Identificación de usuario } {0}

Usertype = Tipo de usuario

Gid = {0}

Client_id = { Identificación del cliente } (1)

Data = { Datos de las sesiones del sitio web }

Table jos_hwdvidsvideos (Tabla de Manejador de Videos)

Esta tabla guarda información relevante a datos adicionales de los videos, es decir:

título, descripción, tipo si es de youtube, duración, etc.

(24/25).

Columns

Page 227: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

71

Key Column Name Datatype Not Null Default Comment

PK id INT Yes

video_type VARCHAR(45) No

video_id VARCHAR(45) No

title No

descripcion VARCHAR(45) No

category_id VARCHAR(45) No

jos_hwdvidsvideos ={ id } + { video_type } + { video_id } + { title } +

{ descripción } + { category_id }

Id = { Identificación de los videos del sitio web }

Video_type = { Tipo de video del sitio web }

Video_id = { Identificación del video del sitio web }

Title = { Titulo del stitio web }

Description = { Descripción del video del sitio web }

category_id = { Identificación de categoría del video del sitio web }

Table jos_hwdvidslogs_views (Tabla de información de Videos)

En esta tabla se guarda el detalle de la estadística del mismo.

(25/25)

Page 228: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

72

Columns

Key Column Name Datatype Not Null Default Comment

PK ide INT Yes

video_id VARCHAR(45) No

user_id VARCHAR(45) No

date VARCHAR(45) No

jos_hwdvidslogs_views = { ide } + { video_id } + { user_id } + { date }

Ide = { Identificación }

Video_id = { Identificación de video del sitio web }

User_id = { Identificación de usuario del sitio web }

Date = { Fecha del sitio web }

1.11 SCRIPT PARA LA CREACIÓN DE BASE DE DATOS

-- phpMyAdmin SQL Dump

-- version 3.3.9

-- http://www.phpmyadmin.net

-- Servidor: localhost

-- Tiempo de generacion: 20-02-2011 a las 12:31:33

-- Version del servidor: 5.1.52

-- Version de PHP: 5.2.4

-- Creación de Base de datos

Page 229: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

73

-- Base de datos: `mashupdb`

-- create database mashupdb;

use mashupdb;

-- Estructura de tabla para la tabla `jos_categories`

-- Categorías del sitio

CREATE TABLE IF NOT EXISTS `jos_categories`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`parent_id` int(11) NOT NULL DEFAULT '0',

`title` varchar(255) NOT NULL DEFAULT '',

`name` varchar(255) NOT NULL DEFAULT '',

`alias` varchar(255) NOT NULL DEFAULT '',

`image` varchar(255) NOT NULL DEFAULT '',

`section` varchar(50) NOT NULL DEFAULT '',

`image_position` varchar(30) NOT NULL DEFAULT '',

`description` text NOT NULL,

`published` tinyint(1) NOT NULL DEFAULT '0',

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`editor` varchar(50) DEFAULT NULL,

`ordering` int(11) NOT NULL DEFAULT '0',

`access` tinyint(3) unsigned NOT NULL DEFAULT '0',

`count` int(11) NOT NULL DEFAULT '0',

`params` text NOT NULL,

PRIMARY KEY (`id`),

KEY `cat_idx` (`section`,`published`,`access`),

Page 230: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

74

KEY `idx_access` (`access`),

KEY `idx_checkout` (`checked_out`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=50 ;

--

-- Estructura de tabla para la tabla `jos_components`

-- Componentes del Sitio

CREATE TABLE IF NOT EXISTS `jos_components`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL DEFAULT '',

`link` varchar(255) NOT NULL DEFAULT '',

`menuid` int(11) unsigned NOT NULL DEFAULT '0',

`parent` int(11) unsigned NOT NULL DEFAULT '0',

`admin_menu_link` varchar(255) NOT NULL DEFAULT '',

`admin_menu_alt` varchar(255) NOT NULL DEFAULT '',

`option` varchar(50) NOT NULL DEFAULT '',

`ordering` int(11) NOT NULL DEFAULT '0',

`admin_menu_img` varchar(255) NOT NULL DEFAULT '',

`iscore` tinyint(4) NOT NULL DEFAULT '0',

`params` text NOT NULL,

`enabled` tinyint(4) NOT NULL DEFAULT '1',

PRIMARY KEY (`id`),

KEY `parent_option` (`parent`,`option`(32))

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=103 ;

Page 231: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

75

--

-- Estructura de tabla para la tabla `jos_comprofiler`

--

CREATE TABLE IF NOT EXISTS `jos_comprofiler`

(

`id` int(11) NOT NULL DEFAULT '0',

`user_id` int(11) NOT NULL DEFAULT '0',

`firstname` varchar(100) DEFAULT NULL,

`middlename` varchar(100) DEFAULT NULL,

`lastname` varchar(100) DEFAULT NULL,

`hits` int(11) NOT NULL DEFAULT '0',

`message_last_sent` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`message_number_sent` int(11) NOT NULL DEFAULT '0',

`avatar` varchar(255) DEFAULT NULL,

`avatarapproved` tinyint(4) NOT NULL DEFAULT '1',

`approved` tinyint(4) NOT NULL DEFAULT '1',

`confirmed` tinyint(4) NOT NULL DEFAULT '1',

`lastupdatedate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`registeripaddr` varchar(50) NOT NULL DEFAULT '',

`cbactivation` varchar(50) NOT NULL DEFAULT '',

`banned` tinyint(4) NOT NULL DEFAULT '0',

`banneddate` datetime DEFAULT NULL,

`unbanneddate` datetime DEFAULT NULL,

`bannedby` int(11) DEFAULT NULL,

`unbannedby` int(11) DEFAULT NULL,

`bannedreason` mediumtext,

`acceptedterms` tinyint(1) NOT NULL DEFAULT '0',

`twitter_username` varchar(255) DEFAULT NULL,

Page 232: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

76

`twitter_userid` bigint(20) unsigned DEFAULT NULL,

`twitter_previous_userid` bigint(20) unsigned DEFAULT NULL,

`twitter_lastupdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`twUsername` varchar(255) DEFAULT NULL,

`twittername` varchar(255) DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `user_id` (`user_id`),

KEY `apprconfbanid` (`approved`,`confirmed`,`banned`,`id`),

KEY `avatappr_apr_conf_ban_avatar`

(`avatarapproved`,`approved`,`confirmed`,`banned`,`avatar`),

KEY `lastupdatedate` (`lastupdatedate`),

KEY `twitter_userid` (`twitter_userid`),

KEY `twitter_previous_userid` (`twitter_previous_userid`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Estructura de tabla para la tabla `jos_comprofiler_fields`

-- (Campos de las tablas del sitio)

CREATE TABLE IF NOT EXISTS `jos_comprofiler_fields`

(

`fieldid` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(50) NOT NULL DEFAULT '',

`tablecolumns` text NOT NULL,

`table` varchar(50) NOT NULL DEFAULT '#__comprofiler',

`title` varchar(255) NOT NULL DEFAULT '',

`description` mediumtext NOT NULL,

`type` varchar(50) NOT NULL DEFAULT '',

Page 233: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

77

`maxlength` int(11) DEFAULT NULL,

`size` int(11) DEFAULT NULL,

`required` tinyint(4) DEFAULT '0',

`tabid` int(11) DEFAULT NULL,

`ordering` int(11) DEFAULT NULL,

`cols` int(11) DEFAULT NULL,

`rows` int(11) DEFAULT NULL,

`value` varchar(50) DEFAULT NULL,

`default` mediumtext,

`published` tinyint(1) NOT NULL DEFAULT '1',

`registration` tinyint(1) NOT NULL DEFAULT '0',

`profile` tinyint(1) NOT NULL DEFAULT '1',

`displaytitle` tinyint(1) NOT NULL DEFAULT '1',

`readonly` tinyint(1) NOT NULL DEFAULT '0',

`searchable` tinyint(1) NOT NULL DEFAULT '0',

`calculated` tinyint(1) NOT NULL DEFAULT '0',

`sys` tinyint(4) NOT NULL DEFAULT '0',

`pluginid` int(11) NOT NULL DEFAULT '0',

`params` mediumtext,

PRIMARY KEY (`fieldid`),

KEY `tabid_pub_prof_order` (`tabid`,`published`,`profile`,`ordering`),

KEY `readonly_published_tabid` (`readonly`,`published`,`tabid`),

KEY `registration_published_order` (`registration`,`published`,`ordering`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=60 ;

-- Estructura de tabla para la tabla `jos_comprofiler_plugin`

-- (Componentes adicionales que funcionan con el Comunity Builder)

Page 234: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

78

CREATE TABLE IF NOT EXISTS `jos_comprofiler_plugin`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(100) NOT NULL DEFAULT '',

`element` varchar(100) NOT NULL DEFAULT '',

`type` varchar(100) DEFAULT '',

`folder` varchar(100) DEFAULT '',

`backend_menu` varchar(255) NOT NULL DEFAULT '',

`access` tinyint(3) unsigned NOT NULL DEFAULT '0',

`ordering` int(11) NOT NULL DEFAULT '0',

`published` tinyint(3) NOT NULL DEFAULT '0',

`iscore` tinyint(3) NOT NULL DEFAULT '0',

`client_id` tinyint(3) NOT NULL DEFAULT '0',

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`params` text NOT NULL,

PRIMARY KEY (`id`),

KEY `idx_folder` (`published`,`client_id`,`access`,`folder`),

KEY `type_pub_order` (`type`,`published`,`ordering`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=504 ;

-- Estructura de tabla para la tabla `jos_comprofiler_sessions`

-- (Manejador de sesiones en los components de Community Builder)

CREATE TABLE IF NOT EXISTS `jos_comprofiler_sessions`

(

`username` varchar(50) NOT NULL DEFAULT '',

`userid` int(11) unsigned NOT NULL DEFAULT '0',

Page 235: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

79

`ui` tinyint(4) NOT NULL DEFAULT '0',

`incoming_ip` varchar(39) NOT NULL DEFAULT '',

`client_ip` varchar(39) NOT NULL DEFAULT '',

`session_id` varchar(33) NOT NULL DEFAULT '',

`session_data` mediumtext NOT NULL,

`expiry_time` int(14) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`session_id`),

KEY `expiry_time` (`expiry_time`),

KEY `userid` (`userid`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8;

--

-- Estructura de tabla para la tabla `jos_comprofiler_tabs`

--

CREATE TABLE IF NOT EXISTS `jos_comprofiler_tabs`

(

`tabid` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(50) NOT NULL DEFAULT '',

`description` text,

`ordering` int(11) NOT NULL DEFAULT '0',

`ordering_register` int(11) NOT NULL DEFAULT '10',

`width` varchar(10) NOT NULL DEFAULT '.5',

`enabled` tinyint(1) NOT NULL DEFAULT '1',

`pluginclass` varchar(255) DEFAULT NULL,

`pluginid` int(11) DEFAULT NULL,

`fields` tinyint(1) NOT NULL DEFAULT '1',

Page 236: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

80

`params` mediumtext,

`sys` tinyint(4) NOT NULL DEFAULT '0',

`displaytype` varchar(255) NOT NULL DEFAULT '',

`position` varchar(255) NOT NULL DEFAULT '',

`useraccessgroupid` int(9) NOT NULL DEFAULT '-2',

PRIMARY KEY (`tabid`),

KEY `enabled_position_ordering` (`enabled`,`position`,`ordering`),

KEY `orderreg_enabled_pos_order`

(`enabled`,`ordering_register`,`position`,`ordering`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;

-- Estructura de tabla para la tabla `jos_content`

-- (Tabla de Contenidos)

CREATE TABLE IF NOT EXISTS `jos_content`

(

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(255) NOT NULL DEFAULT '',

`alias` varchar(255) NOT NULL DEFAULT '',

`title_alias` varchar(255) NOT NULL DEFAULT '',

`introtext` mediumtext NOT NULL,

`fulltext` mediumtext NOT NULL,

`state` tinyint(3) NOT NULL DEFAULT '0',

`sectionid` int(11) unsigned NOT NULL DEFAULT '0',

`mask` int(11) unsigned NOT NULL DEFAULT '0',

`catid` int(11) unsigned NOT NULL DEFAULT '0',

Page 237: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

81

`created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`created_by` int(11) unsigned NOT NULL DEFAULT '0',

`created_by_alias` varchar(255) NOT NULL DEFAULT '',

`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`modified_by` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`images` text NOT NULL,

`urls` text NOT NULL,

`attribs` text NOT NULL,

`version` int(11) unsigned NOT NULL DEFAULT '1',

`parentid` int(11) unsigned NOT NULL DEFAULT '0',

`ordering` int(11) NOT NULL DEFAULT '0',

`metakey` text NOT NULL,

`metadesc` text NOT NULL,

`access` int(11) unsigned NOT NULL DEFAULT '0',

`hits` int(11) unsigned NOT NULL DEFAULT '0',

`metadata` text NOT NULL,

PRIMARY KEY (`id`),

KEY `idx_section` (`sectionid`),

KEY `idx_access` (`access`),

KEY `idx_checkout` (`checked_out`),

KEY `idx_state` (`state`),

KEY `idx_catid` (`catid`),

KEY `idx_createdby` (`created_by`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=134 ;

Page 238: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

82

-- Estructura de tabla para la tabla `jos_content_frontpage`

-- (COntenido de la Cabezera de la Página)

CREATE TABLE IF NOT EXISTS `jos_content_frontpage`

(

`content_id` int(11) NOT NULL DEFAULT '0',

`ordering` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`content_id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8;

--

-- Volcar la base de datos para la tabla `jos_content_frontpage`

--

INSERT INTO `jos_content_frontpage` (`content_id`, `ordering`) VALUES

(75, 1);

--

-- Estructura de tabla para la tabla `jos_content_rating`

-- (Tabla del contenido del rating del contenido)

CREATE TABLE IF NOT EXISTS `jos_content_rating`

(

`content_id` int(11) NOT NULL DEFAULT '0',

`rating_sum` int(11) unsigned NOT NULL DEFAULT '0',

Page 239: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

83

`rating_count` int(11) unsigned NOT NULL DEFAULT '0',

`lastip` varchar(50) NOT NULL DEFAULT '',

PRIMARY KEY (`content_id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Estructura de tabla para la tabla `jos_groups`

-- (Tabla de Grupos del Sitio)

CREATE TABLE IF NOT EXISTS `jos_groups`

(

`id` tinyint(3) unsigned NOT NULL DEFAULT '0',

`name` varchar(50) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8;

--

-- Volcar la base de datos para la tabla `jos_groups`

--

INSERT INTO `jos_groups` (`id`, `name`) VALUES

(0, 'Public'),

(1, 'Registered'),

(2, 'Special');

--

Page 240: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

84

-- Estructura de tabla para la tabla `jos_hwdvidscategories`

-- (Categorías de Videos)

CREATE TABLE IF NOT EXISTS `jos_hwdvidscategories`

(

`id` int(50) NOT NULL AUTO_INCREMENT,

`parent` int(50) NOT NULL DEFAULT '0',

`category_name` varchar(250) DEFAULT NULL,

`category_description` text,

`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`access_b_v` tinyint(1) NOT NULL DEFAULT '0',

`access_u_r` varchar(7) NOT NULL DEFAULT 'RECURSE',

`access_v_r` varchar(7) NOT NULL DEFAULT 'RECURSE',

`access_u` int(11) NOT NULL DEFAULT '-2',

`access_lev_u` varchar(250) NOT NULL DEFAULT '0,1',

`access_v` int(11) NOT NULL DEFAULT '-2',

`access_lev_v` varchar(250) NOT NULL DEFAULT '0,1',

`thumbnail` text NOT NULL,

`num_vids` int(50) NOT NULL DEFAULT '0',

`num_subcats` int(50) NOT NULL DEFAULT '0',

`order_by` varchar(15) NOT NULL DEFAULT '0',

`ordering` int(50) NOT NULL DEFAULT '0',

`checked_out` int(11) NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`published` tinyint(1) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;

Page 241: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

85

-- Estructura de tabla para la tabla `jos_jcomments`

-- (Tabla de comentarios del sitio)

CREATE TABLE IF NOT EXISTS `jos_jcomments`

(

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`parent` int(11) unsigned NOT NULL DEFAULT '0',

`path` varchar(255) NOT NULL DEFAULT '',

`level` tinyint(1) unsigned NOT NULL DEFAULT '0',

`object_id` int(11) unsigned NOT NULL DEFAULT '0',

`object_group` varchar(255) NOT NULL DEFAULT '',

`object_params` text NOT NULL,

`lang` varchar(255) NOT NULL DEFAULT '',

`userid` int(11) unsigned NOT NULL DEFAULT '0',

`name` varchar(255) NOT NULL DEFAULT '',

`username` varchar(255) NOT NULL DEFAULT '',

`email` varchar(255) NOT NULL DEFAULT '',

`homepage` varchar(255) NOT NULL DEFAULT '',

`title` varchar(255) NOT NULL DEFAULT '',

`comment` text NOT NULL,

`ip` varchar(15) NOT NULL DEFAULT '',

`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`isgood` smallint(5) unsigned NOT NULL DEFAULT '0',

`ispoor` smallint(5) unsigned NOT NULL DEFAULT '0',

`published` tinyint(1) unsigned NOT NULL DEFAULT '0',

`subscribe` tinyint(1) unsigned NOT NULL DEFAULT '0',

`source` varchar(255) NOT NULL DEFAULT '',

`source_id` int(11) unsigned NOT NULL DEFAULT '0',

Page 242: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

86

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`editor` varchar(50) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

KEY `idx_userid` (`userid`),

KEY `idx_source` (`source`),

KEY `idx_email` (`email`),

KEY `idx_lang` (`lang`),

KEY `idx_subscribe` (`subscribe`),

KEY `idx_checkout` (`checked_out`),

KEY `idx_object` (`object_id`,`object_group`,`published`,`date`),

KEY `idx_path` (`path`,`level`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

-- Estructura de tabla para la tabla `jos_menu`

-- (Tabla de Menus)

CREATE TABLE IF NOT EXISTS `jos_menu`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`menutype` varchar(75) DEFAULT NULL,

`name` varchar(255) DEFAULT NULL,

`alias` varchar(255) NOT NULL DEFAULT '',

`link` text,

`type` varchar(50) NOT NULL DEFAULT '',

`published` tinyint(1) NOT NULL DEFAULT '0',

`parent` int(11) unsigned NOT NULL DEFAULT '0',

`componentid` int(11) unsigned NOT NULL DEFAULT '0',

`sublevel` int(11) DEFAULT '0',

`ordering` int(11) DEFAULT '0',

Page 243: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

87

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`pollid` int(11) NOT NULL DEFAULT '0',

`browserNav` tinyint(4) DEFAULT '0',

`access` tinyint(3) unsigned NOT NULL DEFAULT '0',

`utaccess` tinyint(3) unsigned NOT NULL DEFAULT '0',

`params` text NOT NULL,

`lft` int(11) unsigned NOT NULL DEFAULT '0',

`rgt` int(11) unsigned NOT NULL DEFAULT '0',

`home` int(1) unsigned NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `componentid` (`componentid`,`menutype`,`published`,`access`),

KEY `menutype` (`menutype`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=111 ;

-- Estructura de tabla para la tabla `jos_menu_types`

-- (Tabla de Tipos de Menús)

CREATE TABLE IF NOT EXISTS `jos_menu_types`

(

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`menutype` varchar(75) NOT NULL DEFAULT '',

`title` varchar(255) NOT NULL DEFAULT '',

`description` varchar(255) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

UNIQUE KEY `menutype` (`menutype`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--

-- Volcar la base de datos para la tabla `jos_menu_types`

Page 244: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

88

--

INSERT INTO `jos_menu_types` (`id`, `menutype`, `title`, `description`) VALUES

(1, 'mainmenu', 'Main Menu', 'The main menu for the site'),

(2, 'usermenu', 'User Menu', 'A Menu for logged in Users'),

(3, 'topmenu', 'Top Menu', 'Top level navigation'),

(4, 'othermenu', 'Resources', 'Additional links'),

(5, 'ExamplePages', 'Example Pages', 'Example Pages'),

(6, 'keyconcepts', 'Key Concepts', 'This describes some critical information for new

Users.');

--(Tabla de Módulos)

CREATE TABLE IF NOT EXISTS `jos_modules`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` text NOT NULL,

`content` text NOT NULL,

`ordering` int(11) NOT NULL DEFAULT '0',

`position` varchar(50) DEFAULT NULL,

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`published` tinyint(1) NOT NULL DEFAULT '0',

`module` varchar(50) DEFAULT NULL,

`numnews` int(11) NOT NULL DEFAULT '0',

`access` tinyint(3) unsigned NOT NULL DEFAULT '0',

`showtitle` tinyint(3) unsigned NOT NULL DEFAULT '1',

Page 245: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

89

`params` text NOT NULL,

`iscore` tinyint(4) NOT NULL DEFAULT '0',

`client_id` tinyint(4) NOT NULL DEFAULT '0',

`control` text NOT NULL,

PRIMARY KEY (`id`),

KEY `published` (`published`,`access`),

KEY `newsfeeds` (`module`,`published`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=138 ;

-- Estructura de tabla para la tabla `jos_phocagallery`

-- (Tabla de Información de Fotografías)

CREATE TABLE IF NOT EXISTS `jos_phocagallery`

(

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`catid` int(11) NOT NULL DEFAULT '0',

`sid` int(11) NOT NULL DEFAULT '0',

`title` varchar(250) NOT NULL DEFAULT '',

`alias` varchar(255) NOT NULL DEFAULT '',

`filename` varchar(250) NOT NULL DEFAULT '',

`description` text,

`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`hits` int(11) NOT NULL DEFAULT '0',

`latitude` varchar(20) NOT NULL DEFAULT '',

`longitude` varchar(20) NOT NULL DEFAULT '',

`zoom` int(3) NOT NULL DEFAULT '0',

`geotitle` varchar(255) NOT NULL DEFAULT '',

`videocode` text,

`vmproductid` int(11) NOT NULL DEFAULT '0',

Page 246: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

90

`imgorigsize` int(11) NOT NULL DEFAULT '0',

`published` tinyint(1) NOT NULL DEFAULT '0',

`approved` tinyint(1) NOT NULL DEFAULT '0',

`checked_out` int(11) NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`ordering` int(11) NOT NULL DEFAULT '0',

`params` text,

`metakey` text,

`metadesc` text,

`extlink1` text,

`extlink2` text,

`extid` varchar(255) NOT NULL DEFAULT '',

`extl` varchar(255) NOT NULL DEFAULT '',

`extm` varchar(255) NOT NULL DEFAULT '',

`exts` varchar(255) NOT NULL DEFAULT '',

`exto` varchar(255) NOT NULL DEFAULT '',

`extw` varchar(255) NOT NULL DEFAULT '',

`exth` varchar(255) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

KEY `catid` (`catid`,`published`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

-- Estructura de tabla para la tabla `jos_polls`

-- (Tabla de Información de la encuesta)

CREATE TABLE IF NOT EXISTS `jos_polls`

(

Page 247: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

91

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(255) NOT NULL DEFAULT '',

`alias` varchar(255) NOT NULL DEFAULT '',

`voters` int(9) NOT NULL DEFAULT '0',

`checked_out` int(11) NOT NULL DEFAULT '0',

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`published` tinyint(1) NOT NULL DEFAULT '0',

`access` int(11) NOT NULL DEFAULT '0',

`lag` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

--

-- Volcar la base de datos para la tabla `jos_polls`

--

INSERT INTO `jos_polls` (`id`, `title`, `alias`, `voters`, `checked_out`,

`checked_out_time`, `published`, `access`, `lag`) VALUES

(15, '¿Que opina sobre nuestro nuevo sitio web?', 'ique-opina-sobre-nuestro-nuevo-

sitio-web', 20, 0, '0000-00-00 00:00:00', 1, 0, 86400);

-- Estructura de tabla para la tabla `jos_poll_data`

-- (Tabla de Preguntas de Encuestas)

CREATE TABLE IF NOT EXISTS `jos_poll_data`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`pollid` int(11) NOT NULL DEFAULT '0',

Page 248: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

92

`text` text NOT NULL,

`hits` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `pollid` (`pollid`,`text`(1))

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25 ;

--

-- Volcar la base de datos para la tabla `jos_poll_data`

--

INSERT INTO `jos_poll_data` (`id`, `pollid`, `text`, `hits`) VALUES

(13, 15, 'Interesante ', 13),

(14, 15, 'Muy Buena ', 1),

(15, 15, 'Buena', 0),

(16, 15, 'Regular', 4),

(17, 15, '', 1),

(18, 15, '', 1),

(19, 15, '', 0),

(20, 15, '', 0),

(21, 15, '', 0),

(22, 15, '', 0),

(23, 15, '', 0),

(24, 15, '', 0);

-- Estructura de tabla para la tabla `jos_poll_date`

-- (Tabla de respuestas de encuestas)

Page 249: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

93

CREATE TABLE IF NOT EXISTS `jos_poll_date`

(

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`vote_id` int(11) NOT NULL DEFAULT '0',

`poll_id` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `poll_id` (`poll_id`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;

-- Estructura de tabla para la tabla `jos_sections`

-- (Tabla de secciones)

CREATE TABLE IF NOT EXISTS `jos_sections`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`title` varchar(255) NOT NULL DEFAULT '',

`name` varchar(255) NOT NULL DEFAULT '',

`alias` varchar(255) NOT NULL DEFAULT '',

`image` text NOT NULL,

`scope` varchar(50) NOT NULL DEFAULT '',

`image_position` varchar(30) NOT NULL DEFAULT '',

`description` text NOT NULL,

`published` tinyint(1) NOT NULL DEFAULT '0',

`checked_out` int(11) unsigned NOT NULL DEFAULT '0',

Page 250: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

94

`checked_out_time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`ordering` int(11) NOT NULL DEFAULT '0',

`access` tinyint(3) unsigned NOT NULL DEFAULT '0',

`count` int(11) NOT NULL DEFAULT '0',

`params` text NOT NULL,

PRIMARY KEY (`id`),

KEY `idx_scope` (`scope`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

-- Estructura de tabla para la tabla `jos_session`

-- (Tabla de Sesiones)

CREATE TABLE IF NOT EXISTS `jos_session`

(

`username` varchar(150) DEFAULT '',

`time` varchar(14) DEFAULT '',

`session_id` varchar(200) NOT NULL DEFAULT '0',

`guest` tinyint(4) DEFAULT '1',

`userid` int(11) DEFAULT '0',

`usertype` varchar(50) DEFAULT '',

`gid` tinyint(3) unsigned NOT NULL DEFAULT '0',

`client_id` tinyint(3) unsigned NOT NULL DEFAULT '0',

`data` longtext,

PRIMARY KEY (`session_id`(64)),

KEY `whosonline` (`guest`,`usertype`),

KEY `userid` (`userid`),

KEY `time` (`time`)

)

Page 251: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

95

ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- Estructura de tabla para la tabla `jos_users`

-- Creaciones de Usuarios Joomla

CREATE TABLE IF NOT EXISTS `jos_users`

(

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) NOT NULL DEFAULT '',

`username` varchar(150) NOT NULL DEFAULT '',

`email` varchar(100) NOT NULL DEFAULT '',

`password` varchar(100) NOT NULL DEFAULT '',

`usertype` varchar(25) NOT NULL DEFAULT '',

`block` tinyint(4) NOT NULL DEFAULT '0',

`sendEmail` tinyint(4) DEFAULT '0',

`gid` tinyint(3) unsigned NOT NULL DEFAULT '1',

`registerDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`lastvisitDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`activation` varchar(100) NOT NULL DEFAULT '',

`params` text NOT NULL,

PRIMARY KEY (`id`),

KEY `usertype` (`usertype`),

KEY `idx_name` (`name`),

KEY `gid_block` (`gid`,`block`),

KEY `username` (`username`),

KEY `email` (`email`)

)

ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=83 ;

Page 252: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

96

#Esta Base de datos, no maneja claves foráneas ni constraints, funciones, ni #stored

procedures.

1.12 CODIFICACIÓN DE COMPONENTES

C:\wamp\www\mashup\modules\mod_cblogin\mod_cblogin.php

<?php

/**

* Community builder Login Module 1.2 RC 3

* $Id: mod_cblogin.php 1079 2010-06-10 23:59:41Z beat $

*

* @version 1.2

* @package Community Builder 1.2 extensions

* @copyright (C) 2004-2010 Beat & JoomlaJoe & parts 2000 - 2005 Miro

International Pty Ltd

* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU/GPL version

2

*

* Credits to: Jeffrey Randall for initial implementation of avatar, and

Page 253: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

97

* to Antony Ventouris for the PMS integration (he also added the cool animated

image)

*/

if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) )

{ die( 'Direct Access to this location is not allowed.' ); }

/**

* CB framework

* @global CBframework $_CB_framework

*/

global $_CB_framework, $_CB_database, $ueConfig, $mainframe, $_SERVER;

if ( defined( 'JPATH_ADMINISTRATOR' ) ) {

if ( ! file_exists( JPATH_ADMINISTRATOR .

'/components/com_comprofiler/plugin.foundation.php' ) ) {

echo 'CB not installed';

return;

}

include_once( JPATH_ADMINISTRATOR .

'/components/com_comprofiler/plugin.foundation.php' );

} else {

if ( ! file_exists( $mainframe->getCfg( 'absolute_path' ) .

'/administrator/components/com_comprofiler/plugin.foundation.php' ) ) {

echo 'CB not installed';

Page 254: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

98

return;

}

include_once( $mainframe->getCfg( 'absolute_path' ) .

'/administrator/components/com_comprofiler/plugin.foundation.php' );

}

cbimport( 'cb.database' );

cbimport( 'language.front' );

$absolute_path = $_CB_framework->getCfg( 'absolute_path' );

$cblogin_live_site = $_CB_framework->getCfg( 'live_site' );

$len_live_site = strlen($cblogin_live_site); // do not remove: used

further down as well

$isHttps = (isset($_SERVER['HTTPS']) && ( !

empty( $_SERVER['HTTPS'] ) ) && ($_SERVER['HTTPS'] != 'off') );

$return= 'http' . ( $isHttps ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'];

if (!empty ($_SERVER['PHP_SELF']) && ! empty ($_SERVER['REQUEST_URI']))

{

$return= $_SERVER['REQUEST_URI']; // Apache

} else {

$return.= $_SERVER['SCRIPT_NAME']; // IIS

if (isset($_SERVER['QUERY_STRING']) && !

empty($_SERVER['QUERY_STRING'])) {

$return.= '?' . $_SERVER['QUERY_STRING'];

Page 255: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

99

}

}

$return= preg_replace('/[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']/', '""',

preg_replace('/eval\((.*)\)/', '', htmlspecialchars( urldecode( $return ) ) ) );

$return = cbUnHtmlspecialchars( $return );

// avoid unauthorized page acces at very first login after registration confirmation

if (preg_match( '/index.php\?

option=com_comprofiler&task=confirm&confirmCode=|index.php\?

option=com_comprofiler&task=login/', $return)) $return = "index.php";

// $params is defined by include: ignore this warning:

if (is_callable(array($params,"get"))) { // Mambo 4.5.0 compatibility

$message_login = $params->get( 'login_message', 0 );

$message_logout = $params->get( 'logout_message', 0 );

$pretext = $params->get( 'pretext' );

$posttext = $params->get( 'posttext' );

$logoutpretext = $params->get( 'logoutpretext' );

$logoutposttext = $params->get( 'logoutposttext' );

$login = $params->get( 'login', $return );

$logout = $params->get( 'logout', "index.php" );

Page 256: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

100

if ( $logout == '#' ) {

$logout = $return;

}

$name = $params->get( 'name', 0 );

$greeting = $params->get( 'greeting', 1 );

$class_sfx = $params->get( 'moduleclass_sfx', "");

$horizontal = $params->get( 'horizontal', 0);

$show_avatar = $params->get( 'show_avatar', 0);

$avatar_position = $params->get( 'avatar_position', "default");

$text_show_profile = $params->get( 'text_show_profile', "");

$text_edit_profile = $params->get( 'text_edit_profile', "");

$pms_type = $params->get( 'pms_type', 0);

$show_pms = $params->get( 'show_pms', 0);

$remember_enabled = $params->get( 'remember_enabled', 1);

$https_post = $params->get( 'https_post', 0);

$showPendingConnections = $params->get( 'show_connection_notifications',

0);

$show_newaccount = $params->get( 'show_newaccount', 1 );

$show_lostpass = $params->get( 'show_lostpass', 1 );

$name_lenght = $params->get( 'name_lenght', "14" );

Page 257: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

101

$pass_lenght = $params->get( 'pass_lenght', "14" );

$compact = $params->get( 'compact', 0 );

$cb_plugins = $params->get( 'cb_plugins', 0 );

$show_username_pass_icons= $params->get( 'show_username_pass_icons', 0 );

$show_buttons_icons = $params->get( 'show_buttons_icons', 0 );

$show_remind_register_icons = $params-

>get( 'show_remind_register_icons', 0 );

} else {

$message_login = 0;

$message_logout = 0;

$pretext = "";

$posttext = "";

$logoutpretext= "";

$logoutposttext = "";

$login = $return;

$logout = "index.php";

$name = 0;

$greeting = 1;

$class_sfx = "";

$horizontal = 0;

Page 258: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

102

$show_avatar = 0;

$avatar_position = "default";

$text_show_profile = "";

$text_edit_profile = "";

$pms_type = 0;

$show_pms = 0;

$remember_enabled = 1;

$https_post = 0;

$showPendingConnections = 0;

$show_newaccount = 1;

$show_lostpass = 1;

$name_lenght = "10";

$pass_lenght = "10";

$compact = 0;

$cb_plugins = true;

$show_username_pass_icons= 0;

}

$id_sfx = trim( preg_replace( '/\s+/', '_', $class_sfx ) );

switch ( checkJversion() ) {

case 0:

Page 259: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

103

// Mambo 4.5 & Joomla 1.0:

$urlImgPath = $cblogin_live_site."/modules/mod_cblogin/";

break;

case -1:

// Mambo 4.6.x:

$urlImgPath = $cblogin_live_site."/modules/mod_cblogin/";

break;

case 1:

default:

// Joomla 1.5+

$urlImgPath =

$cblogin_live_site."/modules/mod_cblogin/mod_cblogin/";

$lang =& JFactory::getLanguage();

$lang->load("mod_login"); // might not be needed, unsure

break;

}

if ( $_CB_framework->myId() ) {

if ($name) {

if ($name == 2) {

$query = "SELECT firstname FROM #__comprofiler WHERE

id = ". (int) $_CB_framework->myId();

Page 260: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

104

} else {

$query = "SELECT name FROM #__users WHERE id = ".

(int) $_CB_framework->myId();

}

$_CB_database->setQuery( $query );

// some joomla versions (1.5.1, 1.0.11+ do htmlspecialchars in

database!):

$name = htmlspecialchars( cbUnHtmlspecialchars( $_CB_database-

>loadResult() ) );

} else {

$name = htmlspecialchars( cbUnHtmlspecialchars( $_CB_framework-

>myUsername() ) );

}

$logout = cbSef( htmlspecialchars( $logout ) );

// wondering if this was even neeeded: echo '<div style="width:100%;

padding:0px; border-width:0px; margin:0px;">'."\n";

$logoutPost = $_CB_framework->viewUrl( 'logout' );

echo '<form action="'.$logoutPost.'" method="post"

id="mod_login_logoutform'.$id_sfx.'" style="margin:0px;">'."\n";

// Add Authenticated Pre text

if ( $logoutpretext ) {

if ( defined( $logoutpretext ) ) {

Page 261: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

105

echo constant( $logoutpretext );

} else {

echo $logoutpretext;

}

echo "\n";

}

$avatarDisplayed = false;

if ($show_avatar == 0) {

if ($greeting) echo '<span id="mod_login_greeting'.$id_sfx.'">'.sprintf(

_UE_HI_NAME, $name ).'</span>'.($horizontal ? "&nbsp;" : "");

} else {

if (($avatar_position=="default") and ($greeting)) echo

'<span id="mod_login_greeting'.$id_sfx.'">'.sprintf( _UE_HI_NAME,

$name ).'</span>';

$cbUser =& CBuser::getInstance( $_CB_framework-

>myId() );

$oValue = $cbUser-

>avatarFilePath( $show_avatar );

if ($oValue) {

if ($avatar_position=="default") echo '<div style="text-

align:center; margin-left:auto; margin-right:auto;">';

Page 262: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

106

else echo '<div style="float:'.$avatar_position.'; margin: 3px

0px 4px 0px; ">';

echo '<a href="' . $_CB_framework->userProfileUrl() . '"

class="mod_login'.$class_sfx.'">';

echo '<img src="' . htmlspecialchars( $oValue ) . '"

style="margin: 0px 1px 3px 1px; border-width:0px;" alt="'.$name

. '" title="'. _UE_MENU_VIEWMYPROFILE_DESC .

'" class="mod_login'.$class_sfx.'" id="mod_login_avatar'.$id_sfx.'" />';

echo "</a></div>\n";

$avatarDisplayed = true;

}

}

if ( trim( $text_show_profile ) ) {

if ( ! ( ( $compact && ( $show_remind_register_icons == 2 ) ) ||

$horizontal ) ) {

if ($avatar_position=="default") {

echo '<div style="text-align:center; margin-left:auto;

margin-right:auto;">';

} else {

echo '<div style="float:'.$avatar_position.'; margin: 3px

0px 4px 0px; ">';

}

Page 263: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

107

}

echo '<a href="' . $_CB_framework->userProfileUrl() . '"

class="mod_login'.$class_sfx.'">';

echo '<span title="' . _UE_MENU_VIEWMYPROFILE_DESC . '"

class="mod_login_showprofile'.$class_sfx.'">';

if ( $show_remind_register_icons >= 1 ) {

echo '<img src="' . $urlImgPath . 'username.png" alt="' .

_UE_MENU_VIEWMYPROFILE_DESC . '" width="25px" height="20px"

style="border-width:0px;cursor:pointer;" /> ';

}

if ( $show_remind_register_icons <= 1 ) {

if ( defined( $text_show_profile ) ) {

echo constant( $text_show_profile );

} else {

echo $text_show_profile;

}

}

echo '</span>';

echo '</a>';

if ( ! ( ( $compact && ( $show_remind_register_icons == 2 ) ) ||

$horizontal ) ) {

echo "</div>\n";

Page 264: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

108

}

}

if ( trim( $text_edit_profile ) ) {

if ( ! ( ( $compact && ( $show_remind_register_icons == 2 ) ) ||

$horizontal ) ) {

if ($avatar_position=="default") {

echo '<div style="text-align:center; margin-left:auto;

margin-right:auto;">';

} else {

echo '<div style="float:'.$avatar_position.'; margin: 3px

0px 4px 0px; ">';

}

}

echo '<a href="' . $_CB_framework->userProfileEditUrl() . '"

class="mod_login'.$class_sfx.'">';

echo '<span title="' . _UE_EDIT_TITLE . '"

class="mod_login_editprofile'.$class_sfx.'">';

if ( $show_remind_register_icons >= 1 ) {

echo '<img src="' . $urlImgPath . 'edit_profile.png" alt="' .

_UE_EDIT_TITLE . '" width="25px" height="20px" style="border-

width:0px;cursor:pointer;" /> ';

}

Page 265: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

109

if ( $show_remind_register_icons <= 1 ) {

if ( defined( $text_edit_profile ) ) {

echo constant( $text_edit_profile );

} else {

echo $text_edit_profile;

}

}

echo '</span>';

echo '</a>';

if ( ! ( ( $compact && ( $show_remind_register_icons == 2 ) ) ||

$horizontal ) ) {

echo "</div>\n";

}

}

if ( !$horizontal ) {

$preDiv = '<div style="text-align:center; margin:0px auto;"> '

. '<div style="margin:auto; align:center; width:100%;">

'

. '<div style="display:table; margin:auto; align:center;';

$postDiv = "</div></div></div>\n";

}

Page 266: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

110

if ( $show_avatar and ($avatar_position!="default") and ($greeting) ) {

if ($avatarDisplayed && ( ! $horizontal ) ) {

echo $preDiv . '" id="mod_login_greeting'.$id_sfx.'">';

echo '<br />';

echo sprintf( _UE_HI_NAME, '<br />'.$name );

echo $postDiv;

} else {

echo '<span id="mod_login_greeting'.

$id_sfx.'">'.sprintf( _UE_HI_NAME, $name ).'</span>';

}

}

$pms = 0;

if($show_pms != 0) {

$pms = $pms_type; // RC2 quick fix

if($pms != 0)

{

switch ($pms) {

case 1:

$pmsnameprefix = "";

Page 267: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

111

$query_pms_count = "SELECT count(id)

FROM #__".$pmsnameprefix."pms WHERE username=" . $_CB_database-

>Quote( $_CB_framework->myUsername() ) . " AND readstate=0";

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."pms

%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix."pms&amp;page=index".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 2:

$pmsnameprefix = "my";

$query_pms_count = "SELECT count(id)

FROM #__".$pmsnameprefix."pms WHERE username=" . $_CB_database-

>Quote( $_CB_framework->myUsername() ) . " AND readstate=0";

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

Page 268: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

112

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."pms

%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix."pms&amp;task=inbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 3:

$query_pms_count="SELECT count(u.id)

FROM #__uddeim AS u WHERE u.totrash=0 AND u.toread=0 AND u.toid=" . (int)

$_CB_framework->myId();

$_CB_database->setQuery($query_pms_count);

$total_pms = $_CB_database->loadResult();

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_uddeim%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?

option=com_uddeim&amp;task=inbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

Page 269: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

113

case 4: // PMS Enhanced by Stefan:

$pmsnameprefix = "";

$query_pms_count = "SELECT count(id)

FROM #__".$pmsnameprefix."pms WHERE username=" . $_CB_database-

>Quote( $_CB_framework->myUsername() ) . " AND readstate=0 AND inbox=1";

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."pms

%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix."pms&amp;page=inbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 5: // Clexus:

$pmsnameprefix = "my";

$query_pms_count = "SELECT count(id)

FROM #__".$pmsnameprefix."pms WHERE userid='" . (int) $_CB_framework-

>myId() . "' AND readstate=0";

Page 270: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

114

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."pms

%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix."pms&amp;task=inbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 6: // PMS Enhanced 2.x by Stefan:

$pmsnameprefix = "";

$query_pms_count = "SELECT count(id)

FROM #__".$pmsnameprefix."pms WHERE recip_id=" . (int) $_CB_framework-

>myId() . " AND readstate%2=0 AND inbox=1";

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

Page 271: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

115

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."pms

%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix."pms&amp;page=inbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 7:

$pmsnameprefix="missus";

$query_pms_count = "SELECT COUNT(*) FROM #__missus AS m

JOIN #__missus_receipt AS r WHERE m.id=r.id AND r.receptorid='" . (int)

$_CB_framework->myId() . "' AND r.rptr_rstate=0 AND r.rptr_tstate=0 AND

r.rptr_dstate=0 AND m.is_draft=0";

$_CB_database->setQuery( $query_pms_count );

$total_pms = $_CB_database->loadResult();

$query_pms_link = "SELECT id FROM #__menu WHERE

published>=0 AND link LIKE '%com_".$pmsnameprefix."%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

Page 272: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

116

$pms_link = "index.php?option=com_".

$pmsnameprefix."&amp;func=showinbox".($pms_link_id ? "&amp;Itemid=".

$pms_link_id : "");

break;

case 8:

$pmsnameprefix="jim";

$query_pms_count = "SELECT COUNT(id) FROM #__jim WHERE

username=" . $_CB_database->Quote( $_CB_framework->myUsername() ) . " AND

readstate=0";

$_CB_database->setQuery( $query_pms_count );

$total_pms = intval($_CB_database->loadResult());

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".

$pmsnameprefix.($pms_link_id ? "&amp;Itemid=".$pms_link_id : "");

break;

case 9:

$pmsnameprefix="primezilla";

$query_pms_count = "SELECT COUNT(*)

FROM #__primezilla_inbox WHERE userid=" . (int) $_CB_framework->myId() . "

AND flag_read=0 AND flag_deleted=0";

Page 273: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

117

$_CB_database-

>setQuery( $query_pms_count );

$total_pms = intval($_CB_database-

>loadResult());

$query_pms_link = "SELECT id FROM

#__menu WHERE published>=0 AND link LIKE '%com_".$pmsnameprefix."%'";

$_CB_database->setQuery( $query_pms_link );

$pms_link_id = $_CB_database->loadResult();

$pms_link = "index.php?option=com_".$pmsnameprefix.($pms_link_id ?

"&Itemid=".$pms_link_id : "");

break;

case 10: // JAM (Joomla Advanced Message), J1.5 only:

// Amount unread messages:

$query = 'SELECT COUNT(id)'

. ' FROM `#__jam_receivers`'

. ' WHERE rid = ' . (int) $_CB_framework->myId() . ' AND inbox = 1 AND state =

0';

$_CB_database->setQuery( $query );

$total_pms = $_CB_database->loadResult();

// JAM url:

if ( checkJversion() == 1 ) {

Page 274: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

118

$menu =& JSite::getMenu();

$item = $menu->getItems( 'link', 'index.php?

option=com_jam&view=inbox', true);

} else {

$item = false;

}

if ( $item ) {

$pms_link = 'index.php?Itemid=' . $item->id;

} else {

$pms_link = 'index.php?option=com_jam&view=inbox';

}

break;

/* Test-code for SMF PMS integration: to be validated with SMF team before

integration !

case xxx:

global $user_info;

$total_pms = $user_info['unread_messages'];

$pms_link = ???

*/

default:

break;

Page 275: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

119

}

$pmsMsg = "";

if (($total_pms) > 0 ) {

$pmsMsg .= '<a href="'.cbSef("$pms_link").'"

class="mod_login'.$class_sfx.'" id="mod_login_pmsimg'.$id_sfx.'">';

$pmsMsg .= '<img border="0" src="'.

$urlImgPath.'mail.gif" width="14" height="15" alt="NEW" class="mod_login'.

$class_sfx.'" id="mod_login_messagesimg'.$id_sfx.'" /></a><br />'."\n";

$pmsMsg .= '<a href="'.cbSef("$pms_link").'"

class="mod_login'.$class_sfx.'" id="mod_login_pmsa'.$id_sfx.'">';

$pmsMsg .= '<span id="mod_login_messagestext'.

$id_sfx.'">'._UE_PM_MESSAGES_HAVE." ".$total_pms."&nbsp;".($total_pms ==

1 ? _UE_PM_NEW_MESSAGE : _UE_PM_NEW_MESSAGES)."</span></a>\n";

} else {

if($show_pms >= 2 ) {

$pmsMsg .= '<a href="'.cbSef("$pms_link").'"

class="mod_login'.$class_sfx.'" id="mod_login_no_pms'.$id_sfx.'">';

$pmsMsg .= '<span

id="mod_login_nomessagestext'.

$id_sfx.'">'._UE_PM_NO_MESSAGES."</span></a>\n";

}

}

if ($pmsMsg) {

Page 276: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

120

if ( !$horizontal ) echo $preDiv.' margin-top:0.7em;"

id="mod_login_pms'.$id_sfx.'">';

echo $pmsMsg;

if ( !$horizontal ) echo $postDiv;

}

}

}

if($showPendingConnections) {

if(isset($ueConfig['allowConnections']) &&

$ueConfig['allowConnections']) {

// $query = "SELECT count(*) FROM

#__comprofiler_members WHERE pending=1 AND memberid=". (int)

$_CB_framework->myId();

$query = "SELECT COUNT(*)"

. "\n FROM #__comprofiler_members AS m"

. "\n LEFT JOIN #__comprofiler AS c ON m.referenceid=c.id"

. "\n LEFT JOIN #__users AS u ON m.referenceid=u.id"

. "\n WHERE m.memberid=" . (int) $_CB_framework->myId()

. " AND m.pending=1"

. "\n AND c.approved=1 AND c.confirmed=1 AND c.banned=0

AND u.block=0"

;

Page 277: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

121

if(!$_CB_database->setQuery($query)) print $_CB_database-

>getErrorMsg();

$totalpendingconnections = $_CB_database->loadResult();

if($totalpendingconnections > 0) {

if ( !$horizontal ) echo '<div style="margin:0.7em 0px

0px 0px; align:center; text-align:center;" id="mod_login_connections'.$id_sfx.'">';

echo "<span id='mod_login_pendingConn".$id_sfx."'>";

echo "<a href='" . $_CB_framework-

>viewUrl( 'manageconnections' ) . "' class='mod_login".$class_sfx."'

id='mod_login_connectimg".$id_sfx."'>";

echo '<img border="0" src="'.$urlImgPath.'users.gif"

width="21" height="15" alt="NEW" class="mod_login'.$class_sfx.'"

id="mod_login_connections_img'.$id_sfx.'" />';

echo "</a> ";

echo "<a href='" . $_CB_framework-

>viewUrl( 'manageconnections' ) . "' class='mod_login".$class_sfx."'

id='mod_login_connect".$id_sfx."'>";

echo _UE_PM_MESSAGES_HAVE." ".

$totalpendingconnections."&nbsp;"._UE_CONNECTIONREQUIREACTION."</a>

</span>";

if ( !$horizontal ) echo "</div>";

}

}

Page 278: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

122

}

if (!$horizontal) {

if ((!$avatarDisplayed) or ($avatar_position!="default") or ($pms))

$topMargin = "1.4em";

else $topMargin = "2px";

echo '<div style="text-align:center; margin:auto; margin: '.

$topMargin.' 0px 2px 0px;">';

}

if ( $cb_plugins ) {

include_once( $absolute_path .

"/administrator/components/com_comprofiler/plugin.class.php");

global $_PLUGINS;

$_PLUGINS->loadPluginGroup('user');

$pluginsResults = $_PLUGINS-

>trigger( 'onAfterLogoutForm', array( $name_lenght, $pass_lenght, $horizontal,

$class_sfx, &$params ) );

if ( implode( $pluginsResults ) != '' ) {

$divHtml = ( $horizontal ? '<span

class="mod_logout_plugin'.$class_sfx.'">' : '<div class="mod_logout_plugin'.

$class_sfx.'">' );

$divHtmlEnd = ( $horizontal ? '</span>' : '</div>' );

Page 279: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

123

echo $divHtml . implode( $divHtmlEnd . $divHtml,

$pluginsResults ) . $divHtmlEnd;

}

}

// Logout button/icon:

switch ( $show_buttons_icons ) {

case 2:

$buttonStyle = ' style="width:25px;height:20px;border-

width:0px;margin:0px;cursor:pointer;vertical-align:top;background-image:url(' .

$urlImgPath . 'logout.png);background-position:0 0;background-repeat:no-repeat;"'

' title="' . _UE_BUTTON_LOGOUT . '"';

$buttonValue = '';

break;

case 1:

$buttonStyle = ' style="min-height:20px;padding-

left:30px;cursor:pointer;background-image:url(' . $urlImgPath .

'logout.png);background-position:0 0;background-repeat:no-repeat;width:auto;"';

$buttonValue = _UE_BUTTON_LOGOUT;

break;

case 0:

default:

$buttonStyle = '';

Page 280: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

124

$buttonValue = _UE_BUTTON_LOGOUT;

break;

}

echo '<input type="submit" name="Submit" class="button'.$class_sfx.'"

value="' . $buttonValue . '"' . $buttonStyle . ' />';

echo "\n".'<input type="hidden" name="op2" value="logout" />'."\n";

echo '<input type="hidden" name="lang" value="' . $_CB_framework-

>getCfg( 'lang' ) . '" />'."\n";

echo '<input type="hidden" name="return" value="B:' .

base64_encode( $logout ) . '" />'."\n";

echo '<input type="hidden" name="message" value="' .

htmlspecialchars( $message_logout ) . '" />'."\n";

echo cbGetSpoofInputTag( 'logout' );

// this is left for backwards compatibility only, to be removed after CB 1.2:

if ( is_callable("josSpoofValue")) {

$validate = josSpoofValue( 1 );

echo "<input type=\"hidden\" name=\"" . $validate . "\" value=\"1\"

/>\n";

}

if ( !$horizontal ) echo "</div>";

echo "</form>"; // wondering if this was even neeeded: </div>";

// Add Authenticated Post text

Page 281: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

125

if ( $logoutposttext ) {

if ( defined( $logoutposttext ) ) {

echo constant( $logoutposttext );

} else {

echo $logoutposttext;

}

echo "\n";

}

} else { // Login Form :

switch ( isset( $ueConfig['login_type'] ) ? $ueConfig['login_type'] : 0 ) {

case 2:

$userNameText = _UE_EMAIL;

break;

case 1:

// NEXT 3 LINES: CB 1.2 RC 2 + CB 1.2 specific : remove after !

if ( ! defined( '_UE_USERNAME_OR_EMAIL' ) ) {

DEFINE('_UE_USERNAME_OR_EMAIL','Username

or email');

}

$userNameText = _UE_USERNAME_OR_EMAIL;

Page 282: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

126

break;

case 0:

default:

$userNameText = _UE_USERNAME;

break;

}

// redirect to site url (so cookies are recognized correctly after login):

if (strncasecmp($cblogin_live_site, "http://www.", 11)==0 // &&

strncasecmp($cblogin_live_site, "http://", 7)==0

&& strncasecmp( substr($cblogin_live_site, 11), substr($login, 7),

$len_live_site - 11 ) == 0 ) {

// the login return string matches the live site without 'www.' in

it:

// add www subdomain as live_site has it.

$login = "http://www." . substr($login, 7);

} elseif (strncasecmp($cblogin_live_site, "https://www.", 12)==0 // &&

strncasecmp($cblogin_live_site, "https://", 8)==0

&& strncasecmp( substr($cblogin_live_site, 12), substr($login, 8),

$len_live_site - 12 ) == 0 ) {

$login = "https://www." . substr($login, 8); // same for https

/* However, we can't remove www in joomla 1.0.13+, because cookies would fail on

domain test to allow for login:

Page 283: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

127

} elseif (strncasecmp($cblogin_live_site, "http://", 7)==0 &&

strncasecmp($cblogin_live_site, "http://www.", 11)==0

&& strncasecmp( substr($cblogin_live_site, 7), substr($login, 11),

$len_live_site - 7 ) == 0 ) {

$login = "http://" . substr($login, 11);

} elseif (strncasecmp($cblogin_live_site, "https://", 8)==0 &&

strncasecmp($cblogin_live_site, "https://www.", 12)==0

&& strncasecmp( substr($cblogin_live_site, 8), substr($login, 12),

$len_live_site - 8 ) == 0 ) {

$login = "https://" . substr($login, 12);

*/

}

$login = cbSef( $login );

if ( $https_post > 1 /* && ! $isHttps */ ) {

if ((strncmp($login, "http:", 5)!=0) && (strncmp($login, "https:", 6)!

=0)) {

$login = $cblogin_live_site . '/' . $login;

}

$login = str_replace("http://","https://",$login);

}

$loginPost = $_CB_framework->viewUrl( 'login' );

if ( $https_post /* && ! $isHttps */ ) {

Page 284: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

128

if ( ( substr($loginPost, 0, 5) != "http:" ) && ( substr($loginPost, 0, 6) !

= "https:" ) ) {

$loginPost = $cblogin_live_site."/".$loginPost;

}

$loginPost = str_replace("http://","https://",$loginPost);

}

// now we need to make sure that the cookie in return of this post is sent to the

most generic domain, in case multiple domains exist:

// if the current page ($return) is without www, then login should also be

without www, even if live_site has www:

if (strncasecmp($loginPost, "http://www.", 11)==0 // &&

strncasecmp($cblogin_live_site, "http://", 7)==0

&& strncasecmp( substr($loginPost, 11), substr($return, 7),

$len_live_site - 11 ) == 0 ) {

// the login return string matches the live site without 'www.' in

it:

// add www subdomain as live_site has it.

$loginPost = "http://" . substr($loginPost, 11);

} elseif (strncasecmp($loginPost, "https://www.", 12)==0 // &&

strncasecmp($cblogin_live_site, "https://", 8)==0

&& strncasecmp( substr($loginPost, 12), substr($return, 8),

$len_live_site - 12 ) == 0 ) {

Page 285: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

129

$loginPost = "https://" . substr($loginPost, 12); // same for

https

}

echo '<form action="'.$loginPost.'" method="post" id="mod_loginform'.

$id_sfx.'" ';

/*

if ($compact) {

echo "onsubmit=\""

. "return ( ( this.elements['mod_login_username" . $class_sfx .

"'].value != '"._USERNAME."')"

. "&& ( this.elements['mod_login_password" . $class_sfx .

"'].value != 'paswww') )"

."\" ";

}

*/

echo 'style="margin:0px;">'."\n";

if ( $pretext ) {

if ( defined( $pretext ) ) {

echo constant( $pretext );

} else {

echo $pretext;

Page 286: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

130

}

echo "\n";

}

if (!$horizontal) {

echo '<table width="100%" border="0" cellspacing="0"

cellpadding="0" class="mod_login'.$class_sfx.'">'."\n"

. "<tr><td>";

}

$bgstyleUser = '';

$bgstylePass = '';

if ( $compact ) {

if ( $show_username_pass_icons >= 1 ) {

$bgstyleUser .= ' style="background-image:url(' .

$urlImgPath . 'username.png); background-repeat: no-repeat; background-position:

0px 0px; padding-left: 30px; min-height: 18px;width:auto;" ';

$bgstylePass .= ' style="background-image:url(' .

$urlImgPath . 'password.png); background-repeat: no-repeat; background-position:

0px 0px; padding-left: 30px; min-height: 18px;width:auto;" ';

}

if ( $show_username_pass_icons <= 1 ) {

Page 287: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

131

$bgstyleUser .= " alt=\"" .

htmlspecialchars( $userNameText ) . "\" value=\"" . htmlspecialchars( $userNameText

) . "\" "

. "onfocus=\"if

(this.value=='" . addslashes( $userNameText ) . "') this.value=''\"

onblur=\"if(this.value=='') { this.value='" . addslashes( $userNameText ) . "'; return

false; }\"";

$bgstylePass .= " alt=\""._UE_PASS."\"

value=\"paswww\" onfocus=\"if (this.value=='paswww') this.value=''\"

onblur=\"if(this.value=='') { this.value='paswww'; return false; }\"";

}

} else {

if ( $show_username_pass_icons == 2 ) {

$bgstyleUser .= ' style="vertical-align:top;" ';

$bgstylePass .= ' style="vertical-align:top;" ';

}

$txtusername = '<label for="mod_login_username'.

$class_sfx.'">'

.

( $show_username_pass_icons >= 1 ? '<img src="' . $urlImgPath .

'username.png" width="25" height="20" alt="' . $userNameText . '" /> ' : '' )

.

( $show_username_pass_icons <= 1 ? $userNameText : '' )

. '</label>';

Page 288: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

132

$txtpassword = '<label for="mod_login_password'.

$class_sfx.'">'

.

( $show_username_pass_icons >= 1 ? '<img src="' . $urlImgPath .

'password.png" width="25" height="20" alt="' . _UE_PASS . '" /> ' : '' )

.

( $show_username_pass_icons <= 1 ? _UE_PASS : '' )

. '</label>';

echo '<span id="mod_login_usernametext'.$id_sfx.'">'.

$txtusername.'</span>';

}

if ( $compact || ( $show_username_pass_icons == 2 ) ) {

$bgstyleUser .= ' title="' . $userNameText . '"';

$bgstylePass .= ' title="' . _UE_PASS . '"';

}

if ($horizontal) {

echo "&nbsp;\n";

} elseif ( ( ! $compact ) && ( $show_username_pass_icons != 2 ) ) {

echo "<br />\n";

}

echo '<input type="text" name="username" id="mod_login_username'.

$id_sfx.'" class="inputbox'.$class_sfx.'" size="'.$name_lenght.'"' . $bgstyleUser . ' />';

Page 289: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

133

if ($horizontal) {

echo "&nbsp;\n";

} else { // if (!$compact) {

echo "<br />\n";

}

if (!$compact) {

echo '<span id="mod_login_passwordtext'.$id_sfx.'">'.

$txtpassword.'</span>';

}

if ($horizontal) {

echo "&nbsp;";

} elseif ( ( ! $compact ) && ( $show_username_pass_icons != 2 ) ) {

echo "<br />";

}

echo '<span><input type="password" name="passwd"

id="mod_login_password'.$id_sfx.'" class="inputbox'.$class_sfx.'" size="'.

$pass_lenght.'"' . $bgstylePass . ' /></span>';

if ($horizontal) {

echo "&nbsp;\n";

} else {

echo "<br />\n";

Page 290: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

134

}

echo '<input type="hidden" name="op2" value="login" />'."\n";

echo '<input type="hidden" name="lang" value="' . $_CB_framework-

>getCfg( 'lang' ) . '" />' . "\n";

echo '<input type="hidden" name="force_session" value="1" />'."\n";

// makes sure to create joomla 1.0.11+12 session/bugfix

echo '<input type="hidden" name="return" value="B:' .

base64_encode( $login ) . '" />'."\n";

echo '<input type="hidden" name="message" value="' .

htmlspecialchars( $message_login ) . '" />'."\n";

$loginFrom = ( defined( '_UE_LOGIN_FROM' ) ?

constant( '_UE_LOGIN_FROM' ) : 'loginmodule' );

echo '<input type="hidden" name="loginfrom" value="' .

htmlspecialchars( $loginFrom ) . '" />'."\n";

echo cbGetSpoofInputTag( 'login' );

// this is left for backwards compatibility only, to be removed after CB 1.2:

if ( is_callable("josSpoofValue")) {

$validate = josSpoofValue( 1 );

echo "<input type=\"hidden\" name=\"" . $validate . "\" value=\"1\"

/>\n";

}

switch ($remember_enabled) {

Page 291: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

135

case 1:

echo '<input type="checkbox" name="remember"

id="mod_login_remember'.$id_sfx.'"' . ( $class_sfx ? ' class="inputbox'.

$class_sfx.'"' : '' ) . ' value="yes" /> '

.'<span id="mod_login_remembermetext'.

$id_sfx.'"><label for="mod_login_remember'.

$class_sfx.'">'._UE_REMEMBER_ME."</label></span>";

if ($horizontal) echo "&nbsp;\n"; else echo "<br />\n";

break;

case 2:

echo '<input type="hidden" name="remember" value="yes" />';

break;

case 3:

echo '<input type="checkbox" name="remember"

id="mod_login_remember'.$id_sfx.'"' . ( $class_sfx ? ' class="inputbox'.

$class_sfx.'"' : '' ) . ' value="yes" checked="checked" /> '

.'<span id="mod_login_remembermetext'.

$id_sfx.'"><label for="mod_login_remember'.

$class_sfx.'">'._UE_REMEMBER_ME."</label></span>";

if ($horizontal) echo "&nbsp;\n"; else echo "<br />\n";

break;

default:

break;

Page 292: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

136

}

$pluginDisplays = array();

if ( $cb_plugins ) {

include_once( $absolute_path .

"/administrator/components/com_comprofiler/plugin.class.php");

global $_PLUGINS;

$_PLUGINS->loadPluginGroup('user');

$pluginsResults = $_PLUGINS-

>trigger( 'onAfterLoginForm', array( $name_lenght, $pass_lenght, $horizontal,

$class_sfx, &$params ) );

if ( count( $pluginsResults ) > 0 ) {

foreach ( $pluginsResults as $pR ) {

if ( is_array( $pR ) ) {

foreach ($pR as $pK => $pV ) {

$pluginDisplays[$pK][] = $pV;

}

} elseif ( $pR != '' ) {

$pluginDisplays['beforeButton'][] = $pR;

}

}

}

Page 293: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

137

foreach ( $pluginDisplays as $pK => $pV ) {

$divHtml = ( $horizontal ?

'<span' : '<div' ) . ' class="mod_login_plugin'.$class_sfx.' mod_login_plugin_' . $pK .

'">';

$sldivHtml = ( $horizontal ?

'</span>' : '</div>' );

$pluginDisplays[$pK] = $divHtml .

implode( $sldivHtml . $divHtml, $pV ) . $sldivHtml;

}

if ( isset( $pluginDisplays['beforeButton'] ) ) {

echo $pluginDisplays['beforeButton'];

}

}

// Login button/icon:

switch ( $show_buttons_icons ) {

case 2:

$buttonStyle = ' style="width:25px;height:20px;border-

width:0px;margin:0px;cursor:pointer;vertical-align:top;background-image:url(' .

$urlImgPath . 'login.png);background-position:0 0;background-repeat:no-repeat;"'

' title="' . _UE_BUTTON_LOGIN . '"';

$buttonValue = '';

break;

Page 294: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

138

case 1:

$buttonStyle = ' style="min-height:20px;padding-

left:30px;cursor:pointer;background-image:url(' . $urlImgPath .

'login.png);background-position:0 0;background-repeat:no-repeat;width:auto;"';

$buttonValue = _UE_BUTTON_LOGIN;

break;

case 0:

default:

$buttonStyle = '';

$buttonValue = _UE_BUTTON_LOGIN;

break;

}

echo '<input type="submit" name="Submit" class="button'.$class_sfx.'"

value="' . $buttonValue . '"' . $buttonStyle . ' />';

if ($horizontal || ( $show_remind_register_icons == 2 ) ) {

echo "&nbsp;&nbsp;\n";

} else {

echo "</td></tr>\n<tr><td>";

}

if ( isset( $pluginDisplays['afterButton'] ) ) {

echo $pluginDisplays['afterButton'];

Page 295: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

139

}

if ($show_lostpass) {

$loginPost = $_CB_framework-

>viewUrl( 'lostpassword' );

if ( $https_post /* && ! $isHttps */ ) {

if ( ( substr($loginPost, 0, 5) != "http:" ) &&

( substr($loginPost, 0, 6) != "https:" ) ) {

$loginPost = $cblogin_live_site."/".$loginPost;

}

$loginPost = str_replace("http://","https://",$loginPost);

}

echo '<a href="'.$loginPost.'" class="mod_login'.$class_sfx.'">';

if ( $show_remind_register_icons >= 1 ) {

echo '<img src="' . $urlImgPath . 'forgot.png" alt="' .

_UE_USERNAME_PASSWORD_REMINDER . '" title="' .

_UE_USERNAME_PASSWORD_REMINDER . '" width="25px" height="20px"

style="border-width:0px;cursor:pointer;" /> ';

}

if ( $show_remind_register_icons <= 1 ) {

if ($compact) {

echo _UE_LOST_USERNAME_PASSWORD;

} else {

Page 296: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

140

echo ( ( checkJversion() == -1 ) ?

_UE_USERNAME_PASSWORD_REMINDER:

_UE_LOST_USERNAME_PASSWORD );

}

}

echo '</a>';

if ( $show_remind_register_icons == 2 ) {

echo "&nbsp;\n";

} elseif ($horizontal) {

if ($compact) {

echo "&nbsp;|";

} else {

echo "&nbsp;\n";

}

} else echo "</td></tr>\n";

}

// CB config may override the system configuration setting

$registration_enabled = $_CB_framework-

>getCfg( 'allowUserRegistration' );

if ( ! $registration_enabled ) {

Page 297: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

141

if ( isset($ueConfig['reg_admin_allowcbregistration']) &&

$ueConfig['reg_admin_allowcbregistration'] == '1' ) {

$registration_enabled = true;

}

}

if ($registration_enabled && $show_newaccount) {

if ($horizontal || ( $show_remind_register_icons == 2 ) ) {

echo '&nbsp;<span id="mod_login_noaccount'.$id_sfx.'">';

} else {

echo "<tr><td>";

}

if ( ( ! $compact ) && ( $show_remind_register_icons == 0 ) ) {

echo _UE_NO_ACCOUNT . " ";

}

$loginPost = $_CB_framework-

>viewUrl( 'registers' );

if ( $https_post /* && ! $isHttps */ ) {

if ( ( substr($loginPost, 0, 5) != "http:" ) && ( substr($loginPost, 0, 6) != "https:" ) ) {

$loginPost = $cblogin_live_site."/".$loginPost;

}

$loginPost = str_replace("http://","https://",$loginPost);

Page 298: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

142

}

echo '<a href="'.$loginPost.'" class="mod_login'.$class_sfx.'">';

if ( $show_remind_register_icons >= 1 ) {

echo '<img src="' . $urlImgPath . 'register.png" alt="' .

_UE_REGISTER . '" title="' . _UE_REGISTER . '" width="25px" height="20px"

style="border-width:0px;cursor:pointer;" /> ';

}

if ( $show_remind_register_icons <= 1 ) {

echo ( ( ( checkJversion() == -1 ) && ! $compact ) ?

_UE_CREATE_ACCOUNT : _UE_REGISTER );

}

echo '</a>';

if ($horizontal || ( $show_remind_register_icons == 2 ) ) {

echo "</span>\n";

}

if ( ! $horizontal ) {

echo "</td></tr>\n";

}

}

if (!$horizontal) {

echo "</table>";

Page 299: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

143

}

echo "</form>";

if ( isset( $pluginDisplays['almostEnd'] ) ) {

echo $pluginDisplays['almostEnd'];

}

if ( $posttext ) {

if ( defined( $posttext ) ) {

echo constant( $posttext );

} else {

echo $posttext;

}

echo "\n";

}

} ?>

C:\wamp\www\mashup\modules\mod_footer\mod_footer.php

<?php

/**

* @version $Id: mod_footer.php 10381 2008-06-01 03:35:53Z pasamio $

* @package Joomla

* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights

Page 300: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

144

reserved.

* @license GNU/GPL, see LICENSE.php

* Joomla! is free software. This version may have been modified pursuant

* to the GNU General Public License, and as distributed it includes or

* is derivative of works licensed under the GNU General Public License or

* other free or open source software licenses.

* See COPYRIGHT.php for copyright notices and details.

*/

// no direct access

defined('_JEXEC') or die('Restricted access');

global $mainframe;

$date =& JFactory::getDate();

$cur_year = $date->toFormat('%Y');

$csite_name = $mainframe->getCfg('sitename');

if (JString::strpos(JText :: _('FOOTER_LINE1'), '%date%')) {

$line1 = ereg_replace('%date%', $cur_year, JText :: _('FOOTER_LINE1'));

} else {

$line1 = JText :: _('FOOTER_LINE1');

}

if (JString::strpos($line1, '%sitename%')) {

$lineone = ereg_replace('%sitename%', $csite_name, $line1);

} else {

$lineone = $line1;

Page 301: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

145

}

require(JModuleHelper::getLayoutPath('mod_footer'));

?>

C:\wamp\www\mashup\modules\mod_latestnews\mod_latestnews.php

<?php

/**

* @version $Id: mod_latestnews.php 10381 2008-06-01 03:35:53Z pasamio $

* @package Joomla

* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.

* @license GNU/GPL, see LICENSE.php

* Joomla! is free software. This version may have been modified pursuant

* to the GNU General Public License, and as distributed it includes or

* is derivative of works licensed under the GNU General Public License or

* other free or open source software licenses.

* See COPYRIGHT.php for copyright notices and details.

*/

// no direct access

defined('_JEXEC') or die('Restricted access');

// Include the syndicate functions only once

require_once (dirname(__FILE__).DS.'helper.php');

$list = modLatestNewsHelper::getList($params);

require(JModuleHelper::getLayoutPath('mod_latestnews'));

Page 302: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

146

C:\wamp\www\mashup\modules\mod_comprofileronline\mod_comprofileronline.php

<?php

/**

* Users Online Module 1.2

* $Id: mod_comprofileronline.php 1113 2010-06-22 17:37:40Z beat $

* @version 1.2

* @package Community Builder 1.2

* @Copyright (C) 2004-2010 Beat and 2000 - 2003 Miro International Pty Ltd

* @ All rights reserved

* @ Mambo Open Source is Free Software

* @ Released under GNU/GPL License : http://www.gnu.org/copyleft/gpl.html

**/

if ( ! ( defined( '_VALID_CB' ) || defined( '_JEXEC' ) || defined( '_VALID_MOS' ) ) ) { die( 'Direct Access to this location is not allowed.' ); }

/**

* CB framework

* @global CBframework $_CB_framework

*/

global $_CB_framework, $_CB_database, $ueConfig, $mainframe;

if ( defined( 'JPATH_ADMINISTRATOR' ) ) {

if ( ! file_exists( JPATH_ADMINISTRATOR .

return;

}

include_once( JPATH_ADMINISTRATOR .

Page 303: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

147

'/components/com_comprofiler/plugin.foundation.php' ) ) {

echo 'CB not installed';

return;

}

include_once( JPATH_ADMINISTRATOR .

'/components/com_comprofiler/plugin.foundation.php' );

} else {

if ( ! file_exists( $mainframe->getCfg( 'absolute_path' ) .

'/administrator/components/com_comprofiler/plugin.foundation.php' ) ) {

echo 'CB not installed';

return;

}

include_once( $mainframe->getCfg( 'absolute_path' ) .

'/administrator/components/com_comprofiler/plugin.foundation.php' );

}

cbimport( 'cb.database' );

cbimport( 'language.front' );

function getNameFormatOnline($name,$uname,$format) {

if ( $format != 3 ) {

Page 304: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

148

$name =

str_replace( array("&amp;","&quot;","&#039;","&lt;","&gt;"),

array("&","\"","'","<",">"), $name );

}

SWITCH ($format) {

CASE 1 :

$returnName = $name;

break;

CASE 2 :

$returnName = $name." (".$uname.")";

break;

CASE 3 :

$returnName = $uname;

break;

CASE 4 :

$returnName = $uname." (".$name.")";

break;

}

return $returnName;

}

// $params is defined by include: ignore this warning:

Page 305: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

149

if (is_callable(array($params,"get"))) { // Mambo 4.5.0 compatibility

$class_sfx = $params->get( 'moduleclass_sfx');

$pretext = $params->get( 'pretext', "" );

$posttext = $params->get( 'posttext', "" );

} else {

$class_sfx = '';

$pretext = '';

$posttext = '';

}

$query = "SELECT DISTINCT a.username, a.userid, u.name"

."\n FROM #__session AS a, #__users AS u"

."\n WHERE (a.userid = u.id) AND (a.guest = 0) AND "

. ( ( checkJversion() >= 1 ) ? "(a.client_id = 0)" : "(NOT ( a.usertype is NULL

OR a.usertype = ''))" )

."\n ORDER BY " . ( ( $ueConfig['name_format'] > 2 ) ? "a.username" : "u.name" ) .

" ASC";

$_CB_database->setQuery($query);

$rows = $_CB_database->loadObjectList();

$result = '';

if ( count( $rows ) > 0) {

Page 306: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

150

$result.="<ul class='mod_login".$class_sfx."'>\n"; // style='list-style-type:none;

margin:0px; padding:0px; font-weight:bold;'

foreach($rows as $row) {

$result.="<li><a href='" . $_CB_framework->userProfileUrl( (int) $row-

>userid ). "' class='mod_login".

$class_sfx."'>".htmlspecialchars(getNameFormatOnline($row->name,$row-

>username,$ueConfig['name_format']))."</a></li>\n";

}

$result .= "</ul>\n";

if ( $pretext != '' ) {

$result= $pretext . "<br />\n" . $result;

}

$result .=$posttext;

} else {

$result .= _UE_NONE;

}

echo $result;

?>

$server->wsdl->schemaTargetNamespace = 'urn:server';

// configuracion del metodo

$server->register('usuarios',

Page 307: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

151

array('usuario' => 'xsd:string'),

array('return' => 'xsd:string'),

'urn:server',

'urn:server#usuarios'

);

//metodos de consultas

function usuarios($usuario){

require("conexion.php");

$data="0";

$rs = mysql_query("SELECT * FROM jos_users where

username='".$usuario."'", $con);

if(mysql_num_rows($rs)>0){

$data="1";

}

return $data;

}

Page 308: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

152

// Use the request to (try to) invoke the service

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ?

$HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);

?>

<?php

require_once('DataBasePOO.php');

$db = new DataBasePOO();

echo "111";

$data="";

$datos=$db->Listado("SELECT username FROM jos_users");

for ($i=0;$i<count($datos); $i++){

$row=$datos[$i];

// print_r($row);

$data=$data.$row[0];

}

echo $data;

?>

Page 309: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

153

<?php

/*

$Id: nusoapmime.php,v 1.13 2010/04/26 20:15:08 snichol Exp $

NuSOAP - Web Services Toolkit for PHP

Copyright (c) 2002 NuSphere Corporation

This library is free software; you can redistribute it and/or modify it under the terms

of the GNU Lesser General Public License as published by the Free Software

Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY

WARRANTY; without even the implied warranty of MERCHANTABILITY or

FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public

License for more details.

You should have received a copy of the GNU Lesser General Public License along

with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place,

Suite 330, Boston, MA 02111-1307 USA

Page 310: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

154

The NuSOAP project home is:

http://sourceforge.net/projects/nusoap/

The primary support for NuSOAP is the mailing list: nusoap

[email protected]

If you have any questions or comments, please email:

Dietrich Ayala

[email protected]

http://dietrich.ganx4.com/nusoap

NuSphere Corporation

http://www.nusphere.com

*/

/*require_once('nusoap.php');*/

/* PEAR Mail_MIME library */

require_once('Mail/mimeDecode.php');

require_once('Mail/mimePart.php');

Page 311: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

155

/**

* nusoap_client_mime client supporting MIME attachments defined at

* http://www.w3.org/TR/SOAP-attachments. It depends on the PEAR Mail_MIME

library.

*

* @author Scott Nichol <[email protected]>

* @author Thanks to Guillaume and Henning Reich for posting great attachment

code to the mail list

* @version $Id: nusoapmime.php,v 1.13 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_client_mime extends nusoap_client {

/**

* @var array Each array element in the return is an associative array with

keys

* data, filename, contenttype, cid

* @access private

*/

var $requestAttachments = array();

/**

Page 312: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

156

* @var array Each array element in the return is an associative array with

keys

* data, filename, contenttype, cid

* @access private

*/

var $responseAttachments;

/**

* @var string

* @access private

*/

var $mimeContentType;

/**

* adds a MIME attachment to the current request.

*

* If the $data parameter contains an empty string, this method will read

* the contents of the file named by the $filename parameter.

*

* If the $cid parameter is false, this method will generate the cid.

*

Page 313: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

157

* @param string $data The data of the attachment

* @param string $filename The filename of the attachment (default is empty

string)

* @param string $contenttype The MIME Content-Type of the attachment

(default is application/octet-stream)

* @param string $cid The content-id (cid) of the attachment (default is false)

* @return string The content-id (cid) of the attachment

* @access public

*/

function addAttachment($data, $filename = '', $contenttype =

'application/octet-stream', $cid = false) {

if (! $cid) {

$cid = md5(uniqid(time()));

}

$info['data'] = $data;

$info['filename'] = $filename;

$info['contenttype'] = $contenttype;

$info['cid'] = $cid;

$this->requestAttachments[] = $info;

Page 314: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

158

return $cid;

}

/**

* clears the MIME attachments for the current request.

*

* @access public

*/

function clearAttachments() {

$this->requestAttachments = array();

}

/**

* gets the MIME attachments from the current response.

*

* Each array element in the return is an associative array with keys

* data, filename, contenttype, cid. These keys correspond to the parameters

* for addAttachment.

*

* @return array The attachments.

Page 315: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

159

* @access public

*/

function getAttachments() {

return $this->responseAttachments;

}

/**

* gets the HTTP body for the current request.

*

* @param string $soapmsg The SOAP payload

* @return string The HTTP body, which includes the SOAP payload

* @access private

*/

function getHTTPBody($soapmsg) {

if (count($this->requestAttachments) > 0) {

$params['content_type'] = 'multipart/related; type="text/xml"';

$mimeMessage = new Mail_mimePart('', $params);

unset($params);

$params['content_type'] = 'text/xml';

Page 316: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

160

$params['encoding'] = '8bit';

$params['charset'] = $this->soap_defencoding;

$mimeMessage->addSubpart($soapmsg, $params);

foreach ($this->requestAttachments as $att) {

unset($params);

$params['content_type'] = $att['contenttype'];

$params['encoding'] = 'base64';

$params['disposition'] = 'attachment';

$params['dfilename'] = $att['filename'];

$params['cid'] = $att['cid'];

if ($att['data'] == '' && $att['filename'] <> '') {

if ($fd = fopen($att['filename'], 'rb')) {

$data = fread($fd,

filesize($att['filename']));

fclose($fd);

} else {

$data = '';

Page 317: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

161

}

$mimeMessage->addSubpart($data, $params);

} else {

$mimeMessage->addSubpart($att['data'],

$params);

}

}

$output = $mimeMessage->encode();

$mimeHeaders = $output['headers'];

foreach ($mimeHeaders as $k => $v) {

$this->debug("MIME header $k: $v");

if (strtolower($k) == 'content-type') {

// PHP header() seems to strip leading

whitespace starting

// the second line, so force everything to one line

$this->mimeContentType = str_replace("\r\n", "

", $v);

}

}

Page 318: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

162

return $output['body'];

}

return parent::getHTTPBody($soapmsg);

}

/**

* gets the HTTP content type for the current request.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type for the current request.

* @access private

*/

function getHTTPContentType() {

if (count($this->requestAttachments) > 0) {

return $this->mimeContentType;

}

return parent::getHTTPContentType();

}

Page 319: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

163

/**

* gets the HTTP content type charset for the current request.

* returns false for non-text content types.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type charset for the current request.

* @access private

*/

function getHTTPContentTypeCharset() {

if (count($this->requestAttachments) > 0) {

return false;

}

return parent::getHTTPContentTypeCharset();

}

/**

* processes SOAP message returned from server

*

* @param array $headers The HTTP headers

Page 320: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

164

* @param string $data unprocessed response data from server

* @return mixed value of the message, decoded into a PHP type

* @access private

*/

function parseResponse($headers, $data) {

$this->debug('Entering parseResponse() for payload of length ' .

strlen($data) . ' and type of ' . $headers['content-type']);

$this->responseAttachments = array();

if (strstr($headers['content-type'], 'multipart/related')) {

$this->debug('Decode multipart/related');

$input = '';

foreach ($headers as $k => $v) {

$input .= "$k: $v\r\n";

}

$params['input'] = $input . "\r\n" . $data;

$params['include_bodies'] = true;

$params['decode_bodies'] = true;

$params['decode_headers'] = true;

$structure = Mail_mimeDecode::decode($params);

Page 321: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

165

foreach ($structure->parts as $part) {

if (!isset($part->disposition) && (strstr($part-

>headers['content-type'], 'text/xml'))) {

$this->debug('Have root part of type ' . $part-

>headers['content-type']);

$root = $part->body;

$return = parent::parseResponse($part->headers,

$part->body);

} else {

$this->debug('Have an attachment of type ' .

$part->headers['content-type']);

$info['data'] = $part->body;

$info['filename'] = isset($part-

>d_parameters['filename']) ? $part->d_parameters['filename'] : '';

$info['contenttype'] = $part->headers['content-

type'];

$info['cid'] = $part->headers['content-id'];

$this->responseAttachments[] = $info;

}

}

if (isset($return)) {

Page 322: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

166

$this->responseData = $root;

return $return;

}

$this->setError('No root part found in multipart/related

content');

return '';

}

$this->debug('Not multipart/related');

return parent::parseResponse($headers, $data);

}

}

/*

* For backwards compatiblity, define soapclientmime unless the PHP SOAP

extension is loaded.

*/

if (!extension_loaded('soap')) {

class soapclientmime extends nusoap_client_mime {

}

}

Page 323: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

167

/**

* nusoap_server_mime server supporting MIME attachments defined at

* http://www.w3.org/TR/SOAP-attachments. It depends on the PEAR Mail_MIME

library.

*

* @author Scott Nichol <[email protected]>

* @author Thanks to Guillaume and Henning Reich for posting great attachment

code to the mail list

* @version $Id: nusoapmime.php,v 1.13 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_server_mime extends nusoap_server {

/**

* @var array Each array element in the return is an associative array with

keys

* data, filename, contenttype, cid

* @access private

*/

var $requestAttachments = array();

/**

Page 324: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

168

* @var array Each array element in the return is an associative array with

keys

* data, filename, contenttype, cid

* @access private

*/

var $responseAttachments;

/**

* @var string

* @access private

*/

var $mimeContentType;

/**

* adds a MIME attachment to the current response.

*

* If the $data parameter contains an empty string, this method will read

* the contents of the file named by the $filename parameter.

*

* If the $cid parameter is false, this method will generate the cid.

*

Page 325: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

169

* @param string $data The data of the attachment

* @param string $filename The filename of the attachment (default is empty

string)

* @param string $contenttype The MIME Content-Type of the attachment

(default is application/octet-stream)

* @param string $cid The content-id (cid) of the attachment (default is false)

* @return string The content-id (cid) of the attachment

* @access public

*/

function addAttachment($data, $filename = '', $contenttype =

'application/octet-stream', $cid = false) {

if (! $cid) {

$cid = md5(uniqid(time()));

}

$info['data'] = $data;

$info['filename'] = $filename;

$info['contenttype'] = $contenttype;

$info['cid'] = $cid;

$this->responseAttachments[] = $info;

return $cid;

}

Page 326: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

170

/**

* clears the MIME attachments for the current response.

*

* @access public

*/

function clearAttachments() {

$this->responseAttachments = array();

}

/**

* gets the MIME attachments from the current request.

*

* Each array element in the return is an associative array with keys

* data, filename, contenttype, cid. These keys correspond to the parameters

* for addAttachment.

*

* @return array The attachments.

* @access public

*/

Page 327: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

171

function getAttachments() {

return $this->requestAttachments;

}

/**

* gets the HTTP body for the current response.

*

* @param string $soapmsg The SOAP payload

* @return string The HTTP body, which includes the SOAP payload

* @access private

*/

function getHTTPBody($soapmsg) {

if (count($this->responseAttachments) > 0) {

$params['content_type'] = 'multipart/related; type="text/xml"';

$mimeMessage = new Mail_mimePart('', $params);

unset($params);

$params['content_type'] = 'text/xml';

$params['encoding'] = '8bit';

$params['charset'] = $this->soap_defencoding;

Page 328: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

172

$mimeMessage->addSubpart($soapmsg, $params);

foreach ($this->responseAttachments as $att) {

unset($params);

$params['content_type'] = $att['contenttype'];

$params['encoding'] = 'base64';

$params['disposition'] = 'attachment';

$params['dfilename'] = $att['filename'];

$params['cid'] = $att['cid'];

if ($att['data'] == '' && $att['filename'] <> '') {

if ($fd = fopen($att['filename'], 'rb')) {

$data = fread($fd,

filesize($att['filename']));

fclose($fd);

} else {

$data = '';

}

$mimeMessage->addSubpart($data, $params);

Page 329: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

173

} else {

$mimeMessage->addSubpart($att['data'],

$params);

}

}

$output = $mimeMessage->encode();

$mimeHeaders = $output['headers'];

foreach ($mimeHeaders as $k => $v) {

$this->debug("MIME header $k: $v");

if (strtolower($k) == 'content-type') {

// PHP header() seems to strip leading

whitespace starting

// the second line, so force everything to one line

$this->mimeContentType = str_replace("\r\n", "

", $v);

}

}

return $output['body'];

Page 330: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

174

}

return parent::getHTTPBody($soapmsg);

}

/**

* gets the HTTP content type for the current response.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type for the current response.

* @access private

*/

function getHTTPContentType() {

if (count($this->responseAttachments) > 0) {

return $this->mimeContentType;

}

return parent::getHTTPContentType();

}

Page 331: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

175

/**

* gets the HTTP content type charset for the current response.

* returns false for non-text content types.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type charset for the current response.

* @access private

*/

function getHTTPContentTypeCharset() {

if (count($this->responseAttachments) > 0) {

return false;

}

return parent::getHTTPContentTypeCharset();

}

/**

* processes SOAP message received from client

*

* @param array $headers The HTTP headers

Page 332: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

176

* @param string $data unprocessed request data from client

* @return mixed value of the message, decoded into a PHP type

* @access private

*/

function parseRequest($headers, $data) {

$this->debug('Entering parseRequest() for payload of length ' .

strlen($data) . ' and type of ' . $headers['content-type']);

$this->requestAttachments = array();

if (strstr($headers['content-type'], 'multipart/related')) {

$this->debug('Decode multipart/related');

$input = '';

foreach ($headers as $k => $v) {

$input .= "$k: $v\r\n";

}

$params['input'] = $input . "\r\n" . $data;

$params['include_bodies'] = true;

$params['decode_bodies'] = true;

$params['decode_headers'] = true;

$structure = Mail_mimeDecode::decode($params);

Page 333: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

177

foreach ($structure->parts as $part) {

if (!isset($part->disposition) && (strstr($part-

>headers['content-type'], 'text/xml'))) {

$this->debug('Have root part of type ' . $part-

>headers['content-type']);

$return = parent::parseRequest($part->headers,

$part->body);

} else {

$this->debug('Have an attachment of type ' .

$part->headers['content-type']);

$info['data'] = $part->body;

$info['filename'] = isset($part-

>d_parameters['filename']) ? $part->d_parameters['filename'] : '';

$info['contenttype'] = $part->headers['content-

type'];

$info['cid'] = $part->headers['content-id'];

$this->requestAttachments[] = $info;

}

}

if (isset($return)) {

return $return;

}

Page 334: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

178

$this->setError('No root part found in multipart/related

content');

return;

}

$this->debug('Not multipart/related');

return parent::parseRequest($headers, $data);

}

}

/*

* For backwards compatiblity

*/

class nusoapservermime extends nusoap_server_mime {

}

Page 335: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

179

?>

<?php

/*

$Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

NuSOAP - Web Services Toolkit for PHP

Copyright (c) 2002 NuSphere Corporation

This library is free software; you can redistribute it and/or modify it under the terms

of the GNU Lesser General Public License as published by the Free Software

Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY

WARRANTY; without even the implied warranty of MERCHANTABILITY or

FITNESS FOR A PARTICULAR PURPOSE. See the GNU

Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along

with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place,

Suite 330, Boston, MA 02111-1307 USA

Page 336: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

180

The NuSOAP project home is:

http://sourceforge.net/projects/nusoap/

The primary support for NuSOAP is the Help forum on the project home page.

If you have any questions or comments, please email:

Dietrich Ayala

[email protected]

http://dietrich.ganx4.com/nusoap

NuSphere Corporation

http://www.nusphere.com

*/

/*

* Some of the standards implmented in whole or part by NuSOAP:

*

Page 337: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

181

* SOAP 1.1 (http://www.w3.org/TR/2000/NOTE-SOAP-20000508/)

* WSDL 1.1 (http://www.w3.org/TR/2001/NOTE-wsdl-20010315)

* SOAP Messages With Attachments (http://www.w3.org/TR/SOAP-

attachments)

* XML 1.0 (http://www.w3.org/TR/2006/REC-xml-20060816/)

* Namespaces in XML 1.0 (http://www.w3.org/TR/2006/REC-xml-names-

20060816/)

* XML Schema 1.0 (http://www.w3.org/TR/xmlschema-0/)

* RFC 2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format

of Internet Message Bodies

* RFC 2068 Hypertext Transfer Protocol -- HTTP/1.1

* RFC 2617 HTTP Authentication: Basic and Digest Access Authentication

*/

/* load classes

// necessary classes

require_once('class.soapclient.php');

require_once('class.soap_val.php');

require_once('class.soap_parser.php');

require_once('class.soap_fault.php');

Page 338: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

182

// transport classes

require_once('class.soap_transport_http.php');

// optional add-on classes

require_once('class.xmlschema.php');

require_once('class.wsdl.php');

// server class

require_once('class.soap_server.php');*/

// class variable emulation

// cf. http://www.webkreator.com/php/techniques/php-static-class-variables.html

$GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel'] = 9;

/**

*

* nusoap_base

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

Page 339: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

183

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_base {

/**

* Identification for HTTP headers.

*

* @var string

* @access private

*/

var $title = 'NuSOAP';

/**

* Version for HTTP headers.

*

* @var string

* @access private

*/

var $version = '0.9.5';

/**

* CVS revision for HTTP headers.

Page 340: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

184

*

* @var string

* @access private

*/

var $revision = '$Revision: 1.123 $';

/**

* Current error string (manipulated by getError/setError)

*

* @var string

* @access private

*/

var $error_str = '';

/**

* Current debug string (manipulated by

debug/appendDebug/clearDebug/getDebug/getDebugAsXMLComment)

*

* @var string

* @access private

*/

var $debug_str = '';

Page 341: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

185

/**

* toggles automatic encoding of special characters as entities

* (should always be true, I think)

*

* @var boolean

* @access private

*/

var $charencoding = true;

/**

* the debug level for this instance

*

* @var integer

* @access private

*/

var $debugLevel;

/**

* set schema version

*

* @var string

Page 342: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

186

* @access public

*/

var $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema';

/**

* charset encoding for outgoing messages

*

* @var string

* @access public

*/

var $soap_defencoding = 'ISO-8859-1';

//var $soap_defencoding = 'UTF-8';

/**

* namespaces in an array of prefix => uri

*

* this is "seeded" by a set of constants, but it may be altered by code

*

* @var array

* @access public

Page 343: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

187

*/

var $namespaces = array(

'SOAP-ENV' => 'http://schemas.xmlsoap.org/soap/envelope/',

'xsd' => 'http://www.w3.org/2001/XMLSchema',

'xsi' => 'http://www.w3.org/2001/XMLSchema-instance',

'SOAP-ENC' => 'http://schemas.xmlsoap.org/soap/encoding/'

);

/**

* namespaces used in the current context, e.g. during serialization

*

* @var array

* @access private

*/

var $usedNamespaces = array();

/**

* XML Schema types in an array of uri => (array of xml type => php type)

* is this legacy yet?

Page 344: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

188

* no, this is used by the nusoap_xmlschema class to verify type => namespace

mappings.

* @var array

* @access public

*/

var $typemap = array(

'http://www.w3.org/2001/XMLSchema' => array(

'string'=>'string','boolean'=>'boolean','float'=>'double','double'=>'doubl

e','decimal'=>'double',

'duration'=>'','dateTime'=>'string','time'=>'string','date'=>'string','gYear

Month'=>'',

'gYear'=>'','gMonthDay'=>'','gDay'=>'','gMonth'=>'','hexBinary'=>'strin

g','base64Binary'=>'string',

// abstract "any" types

'anyType'=>'string','anySimpleType'=>'string',

// derived datatypes

'normalizedString'=>'string','token'=>'string','language'=>'','NMTOKE

N'=>'','NMTOKENS'=>'','Name'=>'','NCName'=>'','ID'=>'',

'IDREF'=>'','IDREFS'=>'','ENTITY'=>'','ENTITIES'=>'','integer'=>'int

eger','nonPositiveInteger'=>'integer',

'negativeInteger'=>'integer','long'=>'integer','int'=>'integer','short'=>'int

eger','byte'=>'integer','nonNegativeInteger'=>'integer',

Page 345: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

189

'unsignedLong'=>'','unsignedInt'=>'','unsignedShort'=>'','unsignedByte'

=>'','positiveInteger'=>''),

'http://www.w3.org/2000/10/XMLSchema' => array(

'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'

double',

'float'=>'double','dateTime'=>'string',

'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-

type'=>'array'),

'http://www.w3.org/1999/XMLSchema' => array(

'i4'=>'','int'=>'integer','boolean'=>'boolean','string'=>'string','double'=>'

double',

'float'=>'double','dateTime'=>'string',

'timeInstant'=>'string','base64Binary'=>'string','base64'=>'string','ur-

type'=>'array'),

'http://soapinterop.org/xsd' => array('SOAPStruct'=>'struct'),

'http://schemas.xmlsoap.org/soap/encoding/' =>

array('base64'=>'string','array'=>'array','Array'=>'array'),

'http://xml.apache.org/xml-soap' => array('Map')

);

/**

* XML entities to convert

Page 346: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

190

*

* @var array

* @access public

* @deprecated

* @seeexpandEntities

*/

var $xmlEntities = array('quot' => '"','amp' => '&',

'lt' => '<','gt' => '>','apos' => "'");

/**

* constructor

*

* @access public

*/

function nusoap_base() {

$this->debugLevel = $GLOBALS['_transient']['static']['nusoap_base']

['globalDebugLevel'];

}

/**

Page 347: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

191

* gets the global debug level, which applies to future instances

*

* @return integer Debug level 0-9, where 0 turns off

* @access public

*/

function getGlobalDebugLevel() {

return $GLOBALS['_transient']['static']['nusoap_base']

['globalDebugLevel'];

}

/**

* sets the global debug level, which applies to future instances

*

* @param int $level Debug level 0-9, where 0 turns off

* @access public

*/

function setGlobalDebugLevel($level) {

$GLOBALS['_transient']['static']['nusoap_base']['globalDebugLevel']

= $level;

}

Page 348: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

192

/**

* gets the debug level for this instance

*

* @return int Debug level 0-9, where 0 turns off

* @access public

*/

function getDebugLevel() {

return $this->debugLevel;

}

/**

* sets the debug level for this instance

*

* @param int $level Debug level 0-9, where 0 turns off

* @access public

*/

function setDebugLevel($level) {

$this->debugLevel = $level;

}

Page 349: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

193

/**

* adds debug data to the instance debug string with formatting

*

* @param string $string debug data

* @access private

*/

function debug($string){

if ($this->debugLevel > 0) {

$this->appendDebug($this->getmicrotime().'

'.get_class($this).": $string\n");

}

}

/**

* adds debug data to the instance debug string without formatting

*

* @param string $string debug data

* @access public

*/

function appendDebug($string){

Page 350: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

194

if ($this->debugLevel > 0) {

// it would be nice to use a memory stream here to use

// memory more efficiently

$this->debug_str .= $string;

}

}

/**

* clears the current debug data for this instance

*

* @access public

*/

function clearDebug() {

// it would be nice to use a memory stream here to use

// memory more efficiently

$this->debug_str = '';

}

/**

* gets the current debug data for this instance

Page 351: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

195

*

* @return debug data

* @access public

*/

function &getDebug() {

// it would be nice to use a memory stream here to use

// memory more efficiently

return $this->debug_str;

}

/**

* gets the current debug data for this instance as an XML comment

* this may change the contents of the debug data

*

* @return debug data as an XML comment

* @access public

*/

function &getDebugAsXMLComment() {

// it would be nice to use a memory stream here to use

// memory more efficiently

Page 352: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

196

while (strpos($this->debug_str, '--')) {

$this->debug_str = str_replace('--', '- -', $this->debug_str);

}

$ret = "<!--\n" . $this->debug_str . "\n-->";

return $ret;

}

/**

* expands entities, e.g. changes '<' to '&lt;'.

*

* @param string $val The string in which to expand entities.

* @access private

*/

function expandEntities($val) {

if ($this->charencoding) {

$val = str_replace('&', '&amp;', $val);

$val = str_replace("'", '&apos;', $val);

$val = str_replace('"', '&quot;', $val);

$val = str_replace('<', '&lt;', $val);

$val = str_replace('>', '&gt;', $val);

Page 353: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

197

}

return $val;

}

/**

* returns error string if present

*

* @return mixed error string or false

* @access public

*/

function getError(){

if($this->error_str != ''){

return $this->error_str;

}

return false;

}

/**

* sets error string

*

Page 354: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

198

* @return boolean $string error string

* @access private

*/

function setError($str){

$this->error_str = $str;

}

/**

* detect if array is a simple array or a struct (associative array)

*

* @param mixed $val The PHP array

* @return string (arraySimple|arrayStruct)

* @access private

*/

function isArraySimpleOrStruct($val) {

$keyList = array_keys($val);

foreach ($keyList as $keyListValue) {

if (!is_int($keyListValue)) {

return 'arrayStruct';

}

Page 355: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

199

}

return 'arraySimple';

}

/**

* serializes PHP values in accordance w/ section 5. Type information is

* not serialized if $use == 'literal'.

*

* @param mixed $val The value to serialize

* @param string $name The name (local part) of the XML element

* @param string $type The XML schema type (local part) for the

element

* @param string $name_ns The namespace for the name of the XML

element

* @param string $type_ns The namespace for the type of the

element

* @param array $attributes The attributes to serialize as

name=>value pairs

* @param string $use The WSDL "use" (encoded|literal)

* @param boolean $soapval Whether this is called from

soapval.

* @return string The serialized element, possibly with child elements

Page 356: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

200

* @access public

*/

function serialize_val($val,$name=false,$type=false,$name_ns=false,

$type_ns=false,$attributes=false,$use='encoded',$soapval=false) {

$this->debug("in serialize_val: name=$name, type=$type,

name_ns=$name_ns, type_ns=$type_ns, use=$use, soapval=$soapval");

$this->appendDebug('value=' . $this->varDump($val));

$this->appendDebug('attributes=' . $this->varDump($attributes));

if (is_object($val) && get_class($val) == 'soapval' && (! $soapval)) {

$this->debug("serialize_val: serialize soapval");

$xml = $val->serialize($use);

$this->appendDebug($val->getDebug());

$val->clearDebug();

$this->debug("serialize_val of soapval returning $xml");

return $xml;

}

// force valid name if necessary

if (is_numeric($name)) {

$name = '__numeric_' . $name;

} elseif (! $name) {

Page 357: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

201

$name = 'noname';

}

// if name has ns, add ns prefix to name

$xmlns = '';

if($name_ns){

$prefix = 'nu'.rand(1000,9999);

$name = $prefix.':'.$name;

$xmlns .= " xmlns:$prefix=\"$name_ns\"";

}

// if type is prefixed, create type prefix

if($type_ns != '' && $type_ns == $this->namespaces['xsd']){

// need to fix this. shouldn't default to xsd if no ns specified

// w/o checking against typemap

$type_prefix = 'xsd';

} elseif($type_ns){

$type_prefix = 'ns'.rand(1000,9999);

$xmlns .= " xmlns:$type_prefix=\"$type_ns\"";

}

// serialize attributes if present

$atts = '';

Page 358: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

202

if($attributes){

foreach($attributes as $k => $v){

$atts .= " $k=\"".$this->expandEntities($v).'"';

}

}

// serialize null value

if (is_null($val)) {

$this->debug("serialize_val: serialize null");

if ($use == 'literal') {

// TODO: depends on minOccurs

$xml = "<$name$xmlns$atts/>";

$this->debug("serialize_val returning $xml");

return $xml;

} else {

if (isset($type) && isset($type_prefix)) {

$type_str = " xsi:type=\"$type_prefix:$type\"";

} else {

$type_str = '';

}

Page 359: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

203

$xml = "<$name$xmlns$type_str$atts

xsi:nil=\"true\"/>";

$this->debug("serialize_val returning $xml");

return $xml;

}

}

// serialize if an xsd built-in primitive type

if($type != '' && isset($this->typemap[$this->XMLSchemaVersion][$type])){

$this->debug("serialize_val: serialize xsd built-in primitive type");

if (is_bool($val)) {

if ($type == 'boolean') {

$val = $val ? 'true' : 'false';

} elseif (! $val) {

$val = 0;

}

} else if (is_string($val)) {

$val = $this->expandEntities($val);

}

if ($use == 'literal') {

$xml = "<$name$xmlns$atts>$val</$name>";

Page 360: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

204

$this->debug("serialize_val returning $xml");

return $xml;

} else {

$xml = "<$name$xmlns xsi:type=\"xsd:

$type\"$atts>$val</$name>";

$this->debug("serialize_val returning $xml");

return $xml;

}

}

// detect type and serialize

$xml = '';

switch(true) {

case (is_bool($val) || $type == 'boolean'):

$this->debug("serialize_val: serialize boolean");

if ($type == 'boolean') {

$val = $val ? 'true' : 'false';

} elseif (! $val) {

$val = 0;

}

if ($use == 'literal') {

Page 361: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

205

$xml .= "<$name$xmlns$atts>$val</$name>";

} else {

$xml .= "<$name$xmlns

xsi:type=\"xsd:boolean\"$atts>$val</$name>";

}

break;

case (is_int($val) || is_long($val) || $type == 'int'):

$this->debug("serialize_val: serialize int");

if ($use == 'literal') {

$xml .= "<$name$xmlns$atts>$val</$name>";

} else {

$xml .= "<$name$xmlns

xsi:type=\"xsd:int\"$atts>$val</$name>";

}

break;

case (is_float($val)|| is_double($val) || $type == 'float'):

$this->debug("serialize_val: serialize float");

if ($use == 'literal') {

$xml .= "<$name$xmlns$atts>$val</$name>";

} else {

Page 362: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

206

$xml .= "<$name$xmlns

xsi:type=\"xsd:float\"$atts>$val</$name>";

}

break;

case (is_string($val) || $type == 'string'):

$this->debug("serialize_val: serialize string");

$val = $this->expandEntities($val);

if ($use == 'literal') {

$xml .= "<$name$xmlns$atts>$val</$name>";

} else {

$xml .= "<$name$xmlns

xsi:type=\"xsd:string\"$atts>$val</$name>";

}

break;

case is_object($val):

$this->debug("serialize_val: serialize object");

if (get_class($val) == 'soapval') {

$this->debug("serialize_val: serialize soapval object");

$pXml = $val->serialize($use);

$this->appendDebug($val->getDebug());

$val->clearDebug();

Page 363: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

207

} else {

if (! $name) {

$name = get_class($val);

$this->debug("In serialize_val, used class

name $name as element name");

} else {

$this->debug("In serialize_val, do not

override name $name for element name for class " . get_class($val));

}

foreach(get_object_vars($val) as $k => $v){

$pXml = isset($pXml) ? $pXml.$this-

>serialize_val($v,$k,false,false,false,false,$use) : $this->serialize_val($v,

$k,false,false,false,false,$use);

}

}

if(isset($type) && isset($type_prefix)){

$type_str = " xsi:type=\"$type_prefix:$type\"";

} else {

$type_str = '';

}

if ($use == 'literal') {

Page 364: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

208

$xml .= "<$name$xmlns$atts>$pXml</

$name>";

} else {

$xml .=

"<$name$xmlns$type_str$atts>$pXml</$name>";

}

break;

break;

case (is_array($val) || $type):

// detect if struct or array

$valueType = $this->isArraySimpleOrStruct($val);

if($valueType=='arraySimple' || preg_match('/^ArrayOf/',$type)){

$this->debug("serialize_val: serialize array");

$i = 0;

if(is_array($val) && count($val)> 0){

foreach($val as $v){

if(is_object($v) && get_class($v) == 'soapval'){

$tt_ns = $v->type_ns;

$tt = $v->type;

} elseif (is_array($v)) {

Page 365: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

209

$tt = $this-

>isArraySimpleOrStruct($v);

} else {

$tt = gettype($v);

}

$array_types[$tt] = 1;

// TODO: for literal, the name

should be $name

$xml .= $this-

>serialize_val($v,'item',false,false,false,false,$use);

++$i;

}

if(count($array_types) > 1){

$array_typename = 'xsd:anyType';

} elseif(isset($tt) && isset($this-

>typemap[$this->XMLSchemaVersion][$tt])) {

if ($tt == 'integer') {

$tt = 'int';

}

$array_typename = 'xsd:'.$tt;

} elseif(isset($tt) && $tt ==

'arraySimple'){

Page 366: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

210

$array_typename = 'SOAP-

ENC:Array';

} elseif(isset($tt) && $tt == 'arrayStruct')

{

$array_typename =

'unnamed_struct_use_soapval';

} else {

// if type is prefixed, create type

prefix

if ($tt_ns != '' && $tt_ns == $this-

>namespaces['xsd']){

$array_typename = 'xsd:' .

$tt;

} elseif ($tt_ns) {

$tt_prefix = 'ns' .

rand(1000, 9999);

$array_typename =

"$tt_prefix:$tt";

$xmlns .= " xmlns:

$tt_prefix=\"$tt_ns\"";

} else {

$array_typename = $tt;

}

Page 367: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

211

}

$array_type = $i;

if ($use == 'literal') {

$type_str = '';

} else if (isset($type) &&

isset($type_prefix)) {

$type_str = "

xsi:type=\"$type_prefix:$type\"";

} else {

$type_str = " xsi:type=\"SOAP-

ENC:Array\" SOAP-ENC:arrayType=\"".$array_typename."[$array_type]\"";

}

// empty array

} else {

if ($use == 'literal') {

$type_str = '';

} else if (isset($type) &&

isset($type_prefix)) {

$type_str = "

xsi:type=\"$type_prefix:$type\"";

} else {

Page 368: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

212

$type_str = " xsi:type=\"SOAP-

ENC:Array\" SOAP-ENC:arrayType=\"xsd:anyType[0]\"";

}

}

// TODO: for array in literal, there is no wrapper

here

$xml = "<$name$xmlns$type_str$atts>".

$xml."</$name>";

} else {

// got a struct

$this->debug("serialize_val: serialize struct");

if(isset($type) && isset($type_prefix)){

$type_str = " xsi:type=\"$type_prefix:

$type\"";

} else {

$type_str = '';

}

if ($use == 'literal') {

$xml .= "<$name$xmlns$atts>";

} else {

$xml .=

"<$name$xmlns$type_str$atts>";

Page 369: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

213

}

foreach($val as $k => $v){

// Apache Map

if ($type == 'Map' && $type_ns ==

'http://xml.apache.org/xml-soap') {

$xml .= '<item>';

$xml .= $this-

>serialize_val($k,'key',false,false,false,false,$use);

$xml .= $this-

>serialize_val($v,'value',false,false,false,false,$use);

$xml .= '</item>';

} else {

$xml .= $this->serialize_val($v,

$k,false,false,false,false,$use);

}

}

$xml .= "</$name>";

}

break;

default:

$this->debug("serialize_val: serialize unknown");

Page 370: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

214

$xml .= 'not detected, got '.gettype($val).' for '.$val;

break;

}

$this->debug("serialize_val returning $xml");

return $xml;

}

/**

* serializes a message

*

* @param string $body the XML of the SOAP body

* @param mixed $headers optional string of XML with SOAP header content, or

array of soapval objects for SOAP headers, or associative array

* @param array $namespaces optional the namespaces used in generating the body

and headers

* @param string $style optional (rpc|document)

* @param string $use optional (encoded|literal)

* @param string $encodingStyle optional (usually

'http://schemas.xmlsoap.org/soap/encoding/' for encoded)

* @return string the message

* @access public

Page 371: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

215

*/

function serializeEnvelope($body,$headers=false,$namespaces=array(),

$style='rpc',$use='encoded',

$encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'){

// TODO: add an option to automatically run utf8_encode on $body and $headers

// if $this->soap_defencoding is UTF-8. Not doing this automatically allows

// one to send arbitrary UTF-8 characters, not just characters that map to ISO-8859-

1

$this->debug("In serializeEnvelope length=" . strlen($body) . " body (max

1000 characters)=" . substr($body, 0, 1000) . " style=$style use=$use

encodingStyle=$encodingStyle");

$this->debug("headers:");

$this->appendDebug($this->varDump($headers));

$this->debug("namespaces:");

$this->appendDebug($this->varDump($namespaces));

// serialize namespaces

$ns_string = '';

foreach(array_merge($this->namespaces,$namespaces) as $k => $v){

$ns_string .= " xmlns:$k=\"$v\"";

}

Page 372: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

216

if($encodingStyle) {

$ns_string = " SOAP-

ENV:encodingStyle=\"$encodingStyle\"$ns_string";

}

// serialize headers

if($headers){

if (is_array($headers)) {

$xml = '';

foreach ($headers as $k => $v) {

if (is_object($v) && get_class($v) == 'soapval') {

$xml .= $this->serialize_val($v, false, false,

false, false, false, $use);

} else {

$xml .= $this->serialize_val($v, $k, false, false,

false, false, $use);

}

}

$headers = $xml;

$this->debug("In serializeEnvelope, serialized array of headers

to $headers");

Page 373: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

217

}

$headers = "<SOAP-ENV:Header>".$headers."</SOAP-

ENV:Header>";

}

// serialize envelope

return

'<?xml version="1.0" encoding="'.$this->soap_defencoding .'"?'.">".

'<SOAP-ENV:Envelope'.$ns_string.">".

$headers.

"<SOAP-ENV:Body>".

$body.

"</SOAP-ENV:Body>".

"</SOAP-ENV:Envelope>";

}

/**

* formats a string to be inserted into an HTML stream

*

* @param string $str The string to format

* @return string The formatted string

Page 374: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

218

* @access public

* @deprecated

*/

function formatDump($str){

$str = htmlspecialchars($str);

return nl2br($str);

}

/**

* contracts (changes namespace to prefix) a qualified name

*

* @param string $qname qname

* @return string contracted qname

* @access private

*/

function contractQname($qname){

// get element namespace

//$this->xdebug("Contract $qname");

if (strrpos($qname, ':')) {

// get unqualified name

Page 375: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

219

$name = substr($qname, strrpos($qname, ':') + 1);

// get ns

$ns = substr($qname, 0, strrpos($qname, ':'));

$p = $this->getPrefixFromNamespace($ns);

if ($p) {

return $p . ':' . $name;

}

return $qname;

} else {

return $qname;

}

}

/**

* expands (changes prefix to namespace) a qualified name

*

* @param string $qname qname

* @return string expanded qname

* @access private

*/

Page 376: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

220

function expandQname($qname){

// get element prefix

if(strpos($qname,':') && !preg_match('/^http:\/\//',$qname)){

// get unqualified name

$name = substr(strstr($qname,':'),1);

// get ns prefix

$prefix = substr($qname,0,strpos($qname,':'));

if(isset($this->namespaces[$prefix])){

return $this->namespaces[$prefix].':'.$name;

} else {

return $qname;

}

} else {

return $qname;

}

}

/**

* returns the local part of a prefixed string

* returns the original string, if not prefixed

Page 377: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

221

*

* @param string $str The prefixed string

* @return string The local part

* @access public

*/

function getLocalPart($str){

if($sstr = strrchr($str,':')){

// get unqualified name

return substr( $sstr, 1 );

} else {

return $str;

}

}

/**

* returns the prefix part of a prefixed string

* returns false, if not prefixed

*

* @param string $str The prefixed string

* @return mixed The prefix or false if there is no prefix

Page 378: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

222

* @access public

*/

function getPrefix($str){

if($pos = strrpos($str,':')){

// get prefix

return substr($str,0,$pos);

}

return false;

}

/**

* pass it a prefix, it returns a namespace

*

* @param string $prefix The prefix

* @return mixed The namespace, false if no namespace has the specified prefix

* @access public

*/

function getNamespaceFromPrefix($prefix){

if (isset($this->namespaces[$prefix])) {

return $this->namespaces[$prefix];

Page 379: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

223

}

//$this->setError("No namespace registered for prefix '$prefix'");

return false;

}

/**

* returns the prefix for a given namespace (or prefix)

* or false if no prefixes registered for the given namespace

*

* @param string $ns The namespace

* @return mixed The prefix, false if the namespace has no prefixes

* @access public

*/

function getPrefixFromNamespace($ns) {

foreach ($this->namespaces as $p => $n) {

if ($ns == $n || $ns == $p) {

$this->usedNamespaces[$p] = $n;

return $p;

}

}

Page 380: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

224

return false;

}

/**

* returns the time in ODBC canonical form with microseconds

*

* @return string The time in ODBC canonical form with microseconds

* @access public

*/

function getmicrotime() {

if (function_exists('gettimeofday')) {

$tod = gettimeofday();

$sec = $tod['sec'];

$usec = $tod['usec'];

} else {

$sec = time();

$usec = 0;

}

return strftime('%Y-%m-%d %H:%M:%S', $sec) . '.' . sprintf('%06d',

$usec);

Page 381: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

225

}

/**

* Returns a string with the output of var_dump

*

* @param mixed $data The variable to var_dump

* @return string The output of var_dump

* @access public

*/

function varDump($data) {

ob_start();

var_dump($data);

$ret_val = ob_get_contents();

ob_end_clean();

return $ret_val;

}

/**

* represents the object as a string

*

Page 382: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

226

* @return string

* @access public

*/

function __toString() {

return $this->varDump($this);

}

}

// XML Schema Datatype Helper Functions

//xsd:dateTime helpers

/**

* convert unix timestamp to ISO 8601 compliant date string

*

* @param int $timestamp Unix time stamp

* @param boolean $utc Whether the time stamp is UTC or local

* @return mixed ISO 8601 date string or false

* @access public

*/

Page 383: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

227

function timestamp_to_iso8601($timestamp,$utc=true){

$datestr = date('Y-m-d\TH:i:sO',$timestamp);

$pos = strrpos($datestr, "+");

if ($pos === FALSE) {

$pos = strrpos($datestr, "-");

}

if ($pos !== FALSE) {

if (strlen($datestr) == $pos + 5) {

$datestr = substr($datestr, 0, $pos + 3) . ':' . substr($datestr, -2);

}

}

if($utc){

$pattern = '/'.

'([0-9]{4})-'. // centuries & years CCYY-

'([0-9]{2})-'. // months MM-

'([0-9]{2})'. // days DD

'T'. // separator T

'([0-9]{2}):'. // hours hh:

'([0-9]{2}):'. // minutes mm:

'([0-9]{2})(\.[0-9]*)?'. // seconds ss.ss...

Page 384: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

228

'(Z|[+\-][0-9]{2}:?[0-9]{2})?'. // Z to indicate UTC, -/

+HH:MM:SS.SS... for local tz's

'/';

if(preg_match($pattern,$datestr,$regs)){

return sprintf('%04d-%02d-%02dT%02d:%02d:%02dZ',

$regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6]);

}

return false;

} else {

return $datestr;

}

}

/**

* convert ISO 8601 compliant date string to unix timestamp

*

* @param string $datestr ISO 8601 compliant date string

* @return mixed Unix timestamp (int) or false

* @access public

*/

Page 385: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

229

function iso8601_to_timestamp($datestr){

$pattern = '/'.

'([0-9]{4})-'. // centuries & years CCYY-

'([0-9]{2})-'. // months MM-

'([0-9]{2})'. // days DD

'T'. // separator T

'([0-9]{2}):'. // hours hh:

'([0-9]{2}):'. // minutes mm:

'([0-9]{2})(\.[0-9]+)?'. // seconds ss.ss...

'(Z|[+\-][0-9]{2}:?[0-9]{2})?'. // Z to indicate UTC, -/+HH:MM:SS.SS... for

local tz's

'/';

if(preg_match($pattern,$datestr,$regs)){

// not utc

if($regs[8] != 'Z'){

$op = substr($regs[8],0,1);

$h = substr($regs[8],1,2);

$m = substr($regs[8],strlen($regs[8])-2,2);

if($op == '-'){

$regs[4] = $regs[4] + $h;

Page 386: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

230

$regs[5] = $regs[5] + $m;

} elseif($op == '+'){

$regs[4] = $regs[4] - $h;

$regs[5] = $regs[5] - $m;

}

}

return gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3],

$regs[1]);

// return strtotime("$regs[1]-$regs[2]-$regs[3] $regs[4]:$regs[5]:

$regs[6]Z");

} else {

return false;

}

}

/**

* sleeps some number of microseconds

*

* @param string $usec the number of microseconds to sleep

* @access public

* @deprecated

Page 387: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

231

*/

function usleepWindows($usec)

{

$start = gettimeofday();

do

{

$stop = gettimeofday();

$timePassed = 1000000 * ($stop['sec'] - $start['sec'])

+ $stop['usec'] - $start['usec'];

}

while ($timePassed < $usec);

}

?><?php

/**

* Contains information for a SOAP fault.

Page 388: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

232

* Mainly used for returning faults from deployed functions

* in a server instance.

* @author Dietrich Ayala <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_fault extends nusoap_base {

/**

* The fault code (client|server)

* @var string

* @access private

*/

var $faultcode;

/**

* The fault actor

* @var string

* @access private

*/

var $faultactor;

/**

Page 389: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

233

* The fault string, a description of the fault

* @var string

* @access private

*/

var $faultstring;

/**

* The fault detail, typically a string or array of string

* @var mixed

* @access private

*/

var $faultdetail;

/**

* constructor

*

* @param string $faultcode (SOAP-ENV:Client | SOAP-ENV:Server)

* @param string $faultactor only used when msg routed between multiple actors

* @param string $faultstring human readable error message

* @param mixed $faultdetail detail, typically a string or array of string

*/

Page 390: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

234

function nusoap_fault($faultcode,$faultactor='',$faultstring='',$faultdetail=''){

parent::nusoap_base();

$this->faultcode = $faultcode;

$this->faultactor = $faultactor;

$this->faultstring = $faultstring;

$this->faultdetail = $faultdetail;

}

/**

* serialize a fault

*

* @return string The serialization of the fault instance.

* @access public

*/

function serialize(){

$ns_string = '';

foreach($this->namespaces as $k => $v){

$ns_string .= "\n xmlns:$k=\"$v\"";

}

$return_msg =

Page 391: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

235

'<?xml version="1.0" encoding="'.$this->soap_defencoding.'"?

>'.

'<SOAP-ENV:Envelope SOAP-

ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"'.$ns_string.">\n".

'<SOAP-ENV:Body>'.

'<SOAP-ENV:Fault>'.

$this->serialize_val($this->faultcode,

'faultcode').

$this->serialize_val($this->faultactor,

'faultactor').

$this->serialize_val($this->faultstring,

'faultstring').

$this->serialize_val($this->faultdetail, 'detail').

'</SOAP-ENV:Fault>'.

'</SOAP-ENV:Body>'.

'</SOAP-ENV:Envelope>';

return $return_msg;

}

}

/**

* Backward compatibility

Page 392: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

236

*/

class soap_fault extends nusoap_fault {

}

?><?php

/**

* parses an XML Schema, allows access to it's data, other utility methods.

* imperfect, no validation... yet, but quite functional.

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_xmlschema extends nusoap_base {

// files

Page 393: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

237

var $schema = '';

var $xml = '';

// namespaces

var $enclosingNamespaces;

// schema info

var $schemaInfo = array();

var $schemaTargetNamespace = '';

// types, elements, attributes defined by the schema

var $attributes = array();

var $complexTypes = array();

var $complexTypeStack = array();

var $currentComplexType = null;

var $elements = array();

var $elementStack = array();

var $currentElement = null;

var $simpleTypes = array();

var $simpleTypeStack = array();

var $currentSimpleType = null;

// imports

var $imports = array();

Page 394: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

238

// parser vars

var $parser;

var $position = 0;

var $depth = 0;

var $depth_array = array();

var $message = array();

var $defaultNamespace = array();

/**

* constructor

*

* @param string $schema schema document URI

* @param string $xml xml document URI

* @param string $namespaces namespaces defined in enclosing XML

* @access public

*/

function nusoap_xmlschema($schema='',$xml='',$namespaces=array()){

parent::nusoap_base();

$this->debug('nusoap_xmlschema class instantiated, inside

constructor');

Page 395: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

239

// files

$this->schema = $schema;

$this->xml = $xml;

// namespaces

$this->enclosingNamespaces = $namespaces;

$this->namespaces = array_merge($this->namespaces, $namespaces);

// parse schema file

if($schema != ''){

$this->debug('initial schema file: '.$schema);

$this->parseFile($schema, 'schema');

}

// parse xml file

if($xml != ''){

$this->debug('initial xml file: '.$xml);

$this->parseFile($xml, 'xml');

}

Page 396: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

240

}

/**

* parse an XML file

*

* @param string $xml path/URL to XML file

* @param string $type (schema | xml)

* @return boolean

* @access public

*/

function parseFile($xml,$type){

// parse xml file

if($xml != ""){

$xmlStr = @join("",@file($xml));

if($xmlStr == ""){

$msg = 'Error reading XML from '.$xml;

$this->setError($msg);

$this->debug($msg);

return false;

} else {

Page 397: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

241

$this->debug("parsing $xml");

$this->parseString($xmlStr,$type);

$this->debug("done parsing $xml");

return true;

}

}

return false;

}

/**

* parse an XML string

*

* @param string $xml path or URL

* @param string $type (schema|xml)

* @access private

*/

function parseString($xml,$type){

// parse xml string

if($xml != ""){

Page 398: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

242

// Create an XML parser.

$this->parser = xml_parser_create();

// Set the options for parsing the XML data.

xml_parser_set_option($this->parser,

XML_OPTION_CASE_FOLDING, 0);

// Set the object for the parser.

xml_set_object($this->parser, $this);

// Set the element handlers for the parser.

if($type == "schema"){

xml_set_element_handler($this->parser,

'schemaStartElement','schemaEndElement');

xml_set_character_data_handler($this-

>parser,'schemaCharacterData');

} elseif($type == "xml"){

xml_set_element_handler($this->parser,

'xmlStartElement','xmlEndElement');

xml_set_character_data_handler($this-

>parser,'xmlCharacterData');

}

Page 399: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

243

// Parse the XML file.

if(!xml_parse($this->parser,$xml,true)){

// Display an error message.

$errstr = sprintf('XML error parsing XML schema on

line %d: %s',

xml_get_current_line_number($this->parser),

xml_error_string(xml_get_error_code($this->parser))

);

$this->debug($errstr);

$this->debug("XML payload:\n" . $xml);

$this->setError($errstr);

}

xml_parser_free($this->parser);

} else{

$this->debug('no xml passed to parseString()!!');

$this->setError('no xml passed to parseString()!!');

}

}

Page 400: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

244

/**

* gets a type name for an unnamed type

*

* @param string Element name

* @return string A type name for an unnamed type

* @access private

*/

function CreateTypeName($ename) {

$scope = '';

for ($i = 0; $i < count($this->complexTypeStack); $i++) {

$scope .= $this->complexTypeStack[$i] . '_';

}

return $scope . $ename . '_ContainedType';

}

/**

* start-element handler

*

* @param string $parser XML parser object

* @param string $name element name

Page 401: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

245

* @param string $attrs associative array of attributes

* @access private

*/

function schemaStartElement($parser, $name, $attrs) {

// position in the total number of elements, starting from 0

$pos = $this->position++;

$depth = $this->depth++;

// set self as current value for this depth

$this->depth_array[$depth] = $pos;

$this->message[$pos] = array('cdata' => '');

if ($depth > 0) {

$this->defaultNamespace[$pos] = $this-

>defaultNamespace[$this->depth_array[$depth - 1]];

} else {

$this->defaultNamespace[$pos] = false;

}

// get element prefix

if($prefix = $this->getPrefix($name)){

Page 402: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

246

// get unqualified name

$name = $this->getLocalPart($name);

} else {

$prefix = '';

}

// loop thru attributes, expanding, and registering namespace declarations

if(count($attrs) > 0){

foreach($attrs as $k => $v){

// if ns declarations, add to class level array of valid namespaces

if(preg_match('/^xmlns/',$k)){

//$this->xdebug("$k: $v");

//$this->xdebug('ns_prefix: '.$this->getPrefix($k));

if($ns_prefix = substr(strrchr($k,':'),1)){

//$this->xdebug("Add namespace[$ns_prefix] = $v");

$this->namespaces[$ns_prefix] = $v;

} else {

$this->defaultNamespace[$pos] = $v;

if (! $this-

>getPrefixFromNamespace($v)) {

Page 403: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

247

$this->namespaces['ns'.

(count($this->namespaces)+1)] = $v;

}

}

if($v == 'http://www.w3.org/2001/XMLSchema'

|| $v == 'http://www.w3.org/1999/XMLSchema' || $v ==

'http://www.w3.org/2000/10/XMLSchema'){

$this->XMLSchemaVersion = $v;

$this->namespaces['xsi'] = $v.'-instance';

}

}

}

foreach($attrs as $k => $v){

// expand each attribute

$k = strpos($k,':') ? $this->expandQname($k) : $k;

$v = strpos($v,':') ? $this->expandQname($v) : $v;

$eAttrs[$k] = $v;

}

$attrs = $eAttrs;

} else {

$attrs = array();

Page 404: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

248

}

// find status, register data

switch($name){

case 'all': // (optional) compositor content

for a complexType

case 'choice':

case 'group':

case 'sequence':

//$this->xdebug("compositor $name for

currentComplexType: $this->currentComplexType and currentElement: $this-

>currentElement");

$this->complexTypes[$this->currentComplexType]

['compositor'] = $name;

//if($name == 'all' || $name == 'sequence'){

// $this->complexTypes[$this-

>currentComplexType]['phpType'] = 'struct';

//}

break;

case 'attribute': // complexType attribute

//$this->xdebug("parsing attribute $attrs[name] $attrs[ref] of value: ".

$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']);

$this->xdebug("parsing attribute:");

Page 405: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

249

$this->appendDebug($this->varDump($attrs));

if (!isset($attrs['form'])) {

// TODO: handle globals

$attrs['form'] = $this-

>schemaInfo['attributeFormDefault'];

}

if (isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {

$v =

$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];

if (!strpos($v, ':')) {

// no namespace in arrayType attribute

value...

if ($this->defaultNamespace[$pos]) {

// ...so use the default

$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'] = $this-

>defaultNamespace[$pos] . ':' . $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];

}

}

}

if(isset($attrs['name'])){

$this->attributes[$attrs['name']] = $attrs;

Page 406: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

250

$aname = $attrs['name'];

} elseif(isset($attrs['ref']) && $attrs['ref'] ==

'http://schemas.xmlsoap.org/soap/encoding/:arrayType'){

if

(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])) {

$aname = $attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];

} else {

$aname = '';

}

} elseif(isset($attrs['ref'])){

$aname = $attrs['ref'];

$this->attributes[$attrs['ref']] = $attrs;

}

if($this->currentComplexType){ // This should

*always* be

$this->complexTypes[$this-

>currentComplexType]['attrs'][$aname] = $attrs;

}

// arrayType attribute

Page 407: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

251

if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType']) || $this-

>getLocalPart($aname) == 'arrayType'){

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'array';

$prefix = $this->getPrefix($aname);

if(isset($attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'])){

$v =

$attrs['http://schemas.xmlsoap.org/wsdl/:arrayType'];

} else {

$v = '';

}

if(strpos($v,'[,]')){

$this->complexTypes[$this->currentComplexType]

['multidimensional'] = true;

}

$v = substr($v,0,strpos($v,'[')); // clip the []

if(!strpos($v,':') && isset($this->typemap[$this->XMLSchemaVersion]

[$v])){

$v = $this->XMLSchemaVersion.':'.$v;

}

$this->complexTypes[$this->currentComplexType]['arrayType'] = $v;

Page 408: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

252

}

break;

case 'complexContent': // (optional) content for a

complexType

$this->xdebug("do nothing for element $name");

break;

case 'complexType':

array_push($this->complexTypeStack, $this-

>currentComplexType);

if(isset($attrs['name'])){

// TODO: what is the scope of named

complexTypes that appear

// nested within other c complexTypes?

$this->xdebug('processing named complexType

'.$attrs['name']);

//$this->currentElement = false;

$this->currentComplexType = $attrs['name'];

$this->complexTypes[$this-

>currentComplexType] = $attrs;

$this->complexTypes[$this-

>currentComplexType]['typeClass'] = 'complexType';

// This is for constructs like

Page 409: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

253

// <complexType name="ListOfString"

base="soap:Array">

// <sequence>

// <element name="string"

type="xsd:string"

// minOccurs="0"

maxOccurs="unbounded" />

// </sequence>

// </complexType>

if(isset($attrs['base']) &&

preg_match('/:Array$/',$attrs['base'])){

$this->xdebug('complexType is unusual

array');

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'array';

} else {

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'struct';

}

} else {

$name = $this->CreateTypeName($this-

>currentElement);

Page 410: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

254

$this->xdebug('processing unnamed

complexType for element ' . $this->currentElement . ' named ' . $name);

$this->currentComplexType = $name;

//$this->currentElement = false;

$this->complexTypes[$this-

>currentComplexType] = $attrs;

$this->complexTypes[$this-

>currentComplexType]['typeClass'] = 'complexType';

// This is for constructs like

// <complexType name="ListOfString"

base="soap:Array">

// <sequence>

// <element name="string"

type="xsd:string"

// minOccurs="0"

maxOccurs="unbounded" />

// </sequence>

// </complexType>

if(isset($attrs['base']) &&

preg_match('/:Array$/',$attrs['base'])){

$this->xdebug('complexType is unusual

array');

Page 411: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

255

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'array';

} else {

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'struct';

}

}

$this->complexTypes[$this->currentComplexType]

['simpleContent'] = 'false';

break;

case 'element':

array_push($this->elementStack, $this-

>currentElement);

if (!isset($attrs['form'])) {

if ($this->currentComplexType) {

$attrs['form'] = $this-

>schemaInfo['elementFormDefault'];

} else {

// global

$attrs['form'] = 'qualified';

}

}

Page 412: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

256

if(isset($attrs['type'])){

$this->xdebug("processing typed element ".

$attrs['name']." of type ".$attrs['type']);

if (! $this->getPrefix($attrs['type'])) {

if ($this->defaultNamespace[$pos]) {

$attrs['type'] = $this-

>defaultNamespace[$pos] . ':' . $attrs['type'];

$this->xdebug('used default

namespace to make type ' . $attrs['type']);

}

}

// This is for constructs like

// <complexType name="ListOfString"

base="soap:Array">

// <sequence>

// <element name="string"

type="xsd:string"

// minOccurs="0"

maxOccurs="unbounded" />

// </sequence>

// </complexType>

Page 413: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

257

if ($this->currentComplexType && $this-

>complexTypes[$this->currentComplexType]['phpType'] == 'array') {

$this->xdebug('arrayType for unusual

array is ' . $attrs['type']);

$this->complexTypes[$this-

>currentComplexType]['arrayType'] = $attrs['type'];

}

$this->currentElement = $attrs['name'];

$ename = $attrs['name'];

} elseif(isset($attrs['ref'])){

$this->xdebug("processing element as ref to ".

$attrs['ref']);

$this->currentElement = "ref to ".$attrs['ref'];

$ename = $this->getLocalPart($attrs['ref']);

} else {

$type = $this->CreateTypeName($this-

>currentComplexType . '_' . $attrs['name']);

$this->xdebug("processing untyped element " .

$attrs['name'] . ' type ' . $type);

$this->currentElement = $attrs['name'];

$attrs['type'] = $this->schemaTargetNamespace .

':' . $type;

Page 414: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

258

$ename = $attrs['name'];

}

if (isset($ename) && $this->currentComplexType) {

$this->xdebug("add element $ename to

complexType $this->currentComplexType");

$this->complexTypes[$this-

>currentComplexType]['elements'][$ename] = $attrs;

} elseif (!isset($attrs['ref'])) {

$this->xdebug("add element $ename to elements

array");

$this->elements[ $attrs['name'] ] = $attrs;

$this->elements[ $attrs['name'] ]['typeClass'] =

'element';

}

break;

case 'enumeration': // restriction value list member

$this->xdebug('enumeration ' . $attrs['value']);

if ($this->currentSimpleType) {

$this->simpleTypes[$this->currentSimpleType]

['enumeration'][] = $attrs['value'];

} elseif ($this->currentComplexType) {

Page 415: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

259

$this->complexTypes[$this-

>currentComplexType]['enumeration'][] = $attrs['value'];

}

break;

case 'extension': // simpleContent or complexContent type

extension

$this->xdebug('extension ' . $attrs['base']);

if ($this->currentComplexType) {

$ns = $this->getPrefix($attrs['base']);

if ($ns == '') {

$this->complexTypes[$this-

>currentComplexType]['extensionBase'] = $this->schemaTargetNamespace . ':' .

$attrs['base'];

} else {

$this->complexTypes[$this-

>currentComplexType]['extensionBase'] = $attrs['base'];

}

} else {

$this->xdebug('no current complexType to set

extensionBase');

}

break;

Page 416: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

260

case 'import':

if (isset($attrs['schemaLocation'])) {

$this->xdebug('import namespace ' .

$attrs['namespace'] . ' from ' . $attrs['schemaLocation']);

$this->imports[$attrs['namespace']][] = array('location' =>

$attrs['schemaLocation'], 'loaded' => false);

} else {

$this->xdebug('import namespace ' .

$attrs['namespace']);

$this->imports[$attrs['namespace']][] = array('location' => '', 'loaded' =>

true);

if (! $this-

>getPrefixFromNamespace($attrs['namespace'])) {

$this->namespaces['ns'.(count($this-

>namespaces)+1)] = $attrs['namespace'];

}

}

break;

case 'include':

if (isset($attrs['schemaLocation'])) {

$this->xdebug('include into namespace ' . $this-

>schemaTargetNamespace . ' from ' . $attrs['schemaLocation']);

Page 417: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

261

$this->imports[$this->schemaTargetNamespace][] = array('location' =>

$attrs['schemaLocation'], 'loaded' => false);

} else {

$this->xdebug('ignoring invalid XML Schema

construct: include without schemaLocation attribute');

}

break;

case 'list': // simpleType value list

$this->xdebug("do nothing for element $name");

break;

case 'restriction': // simpleType, simpleContent or

complexContent value restriction

$this->xdebug('restriction ' . $attrs['base']);

if($this->currentSimpleType){

$this->simpleTypes[$this->currentSimpleType]

['type'] = $attrs['base'];

} elseif($this->currentComplexType){

$this->complexTypes[$this-

>currentComplexType]['restrictionBase'] = $attrs['base'];

if(strstr($attrs['base'],':') == ':Array'){

$this->complexTypes[$this-

>currentComplexType]['phpType'] = 'array';

Page 418: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

262

}

}

break;

case 'schema':

$this->schemaInfo = $attrs;

$this->schemaInfo['schemaVersion'] = $this-

>getNamespaceFromPrefix($prefix);

if (isset($attrs['targetNamespace'])) {

$this->schemaTargetNamespace =

$attrs['targetNamespace'];

}

if (!isset($attrs['elementFormDefault'])) {

$this->schemaInfo['elementFormDefault'] =

'unqualified';

}

if (!isset($attrs['attributeFormDefault'])) {

$this->schemaInfo['attributeFormDefault'] =

'unqualified';

}

break;

case 'simpleContent': // (optional) content for a complexType

Page 419: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

263

if ($this->currentComplexType) { // This should

*always* be

$this->complexTypes[$this-

>currentComplexType]['simpleContent'] = 'true';

} else {

$this->xdebug("do nothing for element $name

because there is no current complexType");

}

break;

case 'simpleType':

array_push($this->simpleTypeStack, $this-

>currentSimpleType);

if(isset($attrs['name'])){

$this->xdebug("processing simpleType for name

" . $attrs['name']);

$this->currentSimpleType = $attrs['name'];

$this->simpleTypes[ $attrs['name'] ] = $attrs;

$this->simpleTypes[ $attrs['name'] ]['typeClass']

= 'simpleType';

$this->simpleTypes[ $attrs['name'] ]['phpType']

= 'scalar';

} else {

Page 420: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

264

$name = $this->CreateTypeName($this-

>currentComplexType . '_' . $this->currentElement);

$this->xdebug('processing unnamed simpleType

for element ' . $this->currentElement . ' named ' . $name);

$this->currentSimpleType = $name;

//$this->currentElement = false;

$this->simpleTypes[$this->currentSimpleType]

= $attrs;

$this->simpleTypes[$this->currentSimpleType]

['phpType'] = 'scalar';

}

break;

case 'union': // simpleType type list

$this->xdebug("do nothing for element $name");

break;

default:

$this->xdebug("do not have any logic to process

element $name");

}

}

/**

Page 421: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

265

* end-element handler

*

* @param string $parser XML parser object

* @param string $name element name

* @access private

*/

function schemaEndElement($parser, $name) {

// bring depth down a notch

$this->depth--;

// position of current element is equal to the last value left in

depth_array for my depth

if(isset($this->depth_array[$this->depth])){

$pos = $this->depth_array[$this->depth];

}

// get element prefix

if ($prefix = $this->getPrefix($name)){

// get unqualified name

$name = $this->getLocalPart($name);

} else {

$prefix = '';

Page 422: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

266

}

// move on...

if($name == 'complexType'){

$this->xdebug('done processing complexType ' . ($this-

>currentComplexType ? $this->currentComplexType : '(unknown)'));

$this->xdebug($this->varDump($this->complexTypes[$this-

>currentComplexType]));

$this->currentComplexType = array_pop($this-

>complexTypeStack);

//$this->currentElement = false;

}

if($name == 'element'){

$this->xdebug('done processing element ' . ($this-

>currentElement ? $this->currentElement : '(unknown)'));

$this->currentElement = array_pop($this->elementStack);

}

if($name == 'simpleType'){

$this->xdebug('done processing simpleType ' . ($this-

>currentSimpleType ? $this->currentSimpleType : '(unknown)'));

$this->xdebug($this->varDump($this->simpleTypes[$this-

>currentSimpleType]));

Page 423: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

267

$this->currentSimpleType = array_pop($this-

>simpleTypeStack);

}

}

/**

* element content handler

*

* @param string $parser XML parser object

* @param string $data element content

* @access private

*/

function schemaCharacterData($parser, $data){

$pos = $this->depth_array[$this->depth - 1];

$this->message[$pos]['cdata'] .= $data;

}

/**

* serialize the schema

*

Page 424: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

268

* @access public

*/

function serializeSchema(){

$schemaPrefix = $this->getPrefixFromNamespace($this-

>XMLSchemaVersion);

$xml = '';

// imports

if (sizeof($this->imports) > 0) {

foreach($this->imports as $ns => $list) {

foreach ($list as $ii) {

if ($ii['location'] != '') {

$xml .= " <$schemaPrefix:import

location=\"" . $ii['location'] . '" namespace="' . $ns . "\" />\n";

} else {

$xml .= " <$schemaPrefix:import

namespace=\"" . $ns . "\" />\n";

}

}

}

}

Page 425: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

269

// complex types

foreach($this->complexTypes as $typeName => $attrs){

$contentStr = '';

// serialize child elements

if(isset($attrs['elements']) && (count($attrs['elements']) > 0)){

foreach($attrs['elements'] as $element => $eParts){

if(isset($eParts['ref'])){

$contentStr .= "

<$schemaPrefix:element ref=\"$element\"/>\n";

} else {

$contentStr .= "

<$schemaPrefix:element name=\"$element\" type=\"" . $this-

>contractQName($eParts['type']) . "\"";

foreach ($eParts as $aName => $aValue)

{

// handle, e.g., abstract, default,

form, minOccurs, maxOccurs, nillable

if ($aName != 'name' && $aName

!= 'type') {

$contentStr .= "

$aName=\"$aValue\"";

}

Page 426: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

270

}

$contentStr .= "/>\n";

}

}

// compositor wraps elements

if (isset($attrs['compositor']) && ($attrs['compositor'] !=

'')) {

$contentStr = " <$schemaPrefix:

$attrs[compositor]>\n".$contentStr." </$schemaPrefix:$attrs[compositor]>\n";

}

}

// attributes

if(isset($attrs['attrs']) && (count($attrs['attrs']) >= 1)){

foreach($attrs['attrs'] as $attr => $aParts){

$contentStr .= " <$schemaPrefix:attribute";

foreach ($aParts as $a => $v) {

if ($a == 'ref' || $a == 'type') {

$contentStr .= " $a=\"".$this-

>contractQName($v).'"';

} elseif ($a ==

'http://schemas.xmlsoap.org/wsdl/:arrayType') {

Page 427: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

271

$this->usedNamespaces['wsdl'] =

$this->namespaces['wsdl'];

$contentStr .= '

wsdl:arrayType="'.$this->contractQName($v).'"';

} else {

$contentStr .= " $a=\"$v\"";

}

}

$contentStr .= "/>\n";

}

}

// if restriction

if (isset($attrs['restrictionBase']) && $attrs['restrictionBase'] !=

''){

$contentStr = " <$schemaPrefix:restriction base=\"".

$this->contractQName($attrs['restrictionBase'])."\">\n".$contentStr." </

$schemaPrefix:restriction>\n";

// complex or simple content

if ((isset($attrs['elements']) && count($attrs['elements'])

> 0) || (isset($attrs['attrs']) && count($attrs['attrs']) > 0)){

$contentStr = "

<$schemaPrefix:complexContent>\n".$contentStr." </

$schemaPrefix:complexContent>\n";

Page 428: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

272

}

}

// finalize complex type

if($contentStr != ''){

$contentStr = " <$schemaPrefix:complexType

name=\"$typeName\">\n".$contentStr." </$schemaPrefix:complexType>\n";

} else {

$contentStr = " <$schemaPrefix:complexType

name=\"$typeName\"/>\n";

}

$xml .= $contentStr;

}

// simple types

if(isset($this->simpleTypes) && count($this->simpleTypes) > 0){

foreach($this->simpleTypes as $typeName => $eParts){

$xml .= " <$schemaPrefix:simpleType

name=\"$typeName\">\n <$schemaPrefix:restriction base=\"".$this-

>contractQName($eParts['type'])."\">\n";

if (isset($eParts['enumeration'])) {

foreach ($eParts['enumeration'] as $e) {

$xml .= " <$schemaPrefix:enumeration

value=\"$e\"/>\n";

Page 429: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

273

}

}

$xml .= " </$schemaPrefix:restriction>\n </

$schemaPrefix:simpleType>";

}

}

// elements

if(isset($this->elements) && count($this->elements) > 0){

foreach($this->elements as $element => $eParts){

$xml .= " <$schemaPrefix:element name=\"$element\"

type=\"".$this->contractQName($eParts['type'])."\"/>\n";

}

}

// attributes

if(isset($this->attributes) && count($this->attributes) > 0){

foreach($this->attributes as $attr => $aParts){

$xml .= " <$schemaPrefix:attribute name=\"$attr\"

type=\"".$this->contractQName($aParts['type'])."\"\n/>";

}

}

// finish 'er up

Page 430: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

274

$attr = '';

foreach ($this->schemaInfo as $k => $v) {

if ($k == 'elementFormDefault' || $k == 'attributeFormDefault')

{

$attr .= " $k=\"$v\"";

}

}

$el = "<$schemaPrefix:schema$attr targetNamespace=\"$this-

>schemaTargetNamespace\"\n";

foreach (array_diff($this->usedNamespaces, $this-

>enclosingNamespaces) as $nsp => $ns) {

$el .= " xmlns:$nsp=\"$ns\"";

}

$xml = $el . ">\n".$xml."</$schemaPrefix:schema>\n";

return $xml;

}

/**

* adds debug data to the clas level debug string

*

* @param string $string debug data

Page 431: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

275

* @access private

*/

function xdebug($string){

$this->debug('<' . $this->schemaTargetNamespace . '> '.$string);

}

/**

* get the PHP type of a user defined type in the schema

* PHP type is kind of a misnomer since it actually returns 'struct' for assoc. arrays

* returns false if no type exists, or not w/ the given namespace

* else returns a string that is either a native php type, or 'struct'

*

* @param string $type name of defined type

* @param string $ns namespace of type

* @return mixed

* @access public

* @deprecated

*/

function getPHPType($type,$ns){

if(isset($this->typemap[$ns][$type])){

Page 432: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

276

//print "found type '$type' and ns $ns in typemap<br>";

return $this->typemap[$ns][$type];

} elseif(isset($this->complexTypes[$type])){

//print "getting type '$type' and ns $ns from complexTypes

array<br>";

return $this->complexTypes[$type]['phpType'];

}

return false;

}

/**

* returns an associative array of information about a given type

* returns false if no type exists by the given name

*

* For a complexType typeDef = array(

* 'restrictionBase' => '',

* 'phpType' => '',

* 'compositor' => '(sequence|all)',

* 'elements' => array(), // refs to elements array

* 'attrs' => array() // refs to attributes array

Page 433: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

277

* ... and so on (see addComplexType)

* )

*

* For simpleType or element, the array has different keys.

*

* @param string $type

* @return mixed

* @access public

* @see addComplexType

* @see addSimpleType

* @see addElement

*/

function getTypeDef($type){

//$this->debug("in getTypeDef for type $type");

if (substr($type, -1) == '^') {

$is_element = 1;

$type = substr($type, 0, -1);

} else {

$is_element = 0;

}

Page 434: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

278

if((! $is_element) && isset($this->complexTypes[$type])){

$this->xdebug("in getTypeDef, found complexType $type");

return $this->complexTypes[$type];

} elseif((! $is_element) && isset($this->simpleTypes[$type])){

$this->xdebug("in getTypeDef, found simpleType $type");

if (!isset($this->simpleTypes[$type]['phpType'])) {

// get info for type to tack onto the simple type

// TODO: can this ever really apply (i.e. what is a

simpleType really?)

$uqType = substr($this->simpleTypes[$type]['type'],

strrpos($this->simpleTypes[$type]['type'], ':') + 1);

$ns = substr($this->simpleTypes[$type]['type'], 0,

strrpos($this->simpleTypes[$type]['type'], ':'));

$etype = $this->getTypeDef($uqType);

if ($etype) {

$this->xdebug("in getTypeDef, found type for

simpleType $type:");

$this->xdebug($this->varDump($etype));

if (isset($etype['phpType'])) {

$this->simpleTypes[$type]['phpType'] =

$etype['phpType'];

Page 435: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

279

}

if (isset($etype['elements'])) {

$this->simpleTypes[$type]['elements'] =

$etype['elements'];

}

}

}

return $this->simpleTypes[$type];

} elseif(isset($this->elements[$type])){

$this->xdebug("in getTypeDef, found element $type");

if (!isset($this->elements[$type]['phpType'])) {

// get info for type to tack onto the element

$uqType = substr($this->elements[$type]['type'],

strrpos($this->elements[$type]['type'], ':') + 1);

$ns = substr($this->elements[$type]['type'], 0,

strrpos($this->elements[$type]['type'], ':'));

$etype = $this->getTypeDef($uqType);

if ($etype) {

$this->xdebug("in getTypeDef, found type for

element $type:");

$this->xdebug($this->varDump($etype));

Page 436: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

280

if (isset($etype['phpType'])) {

$this->elements[$type]['phpType'] =

$etype['phpType'];

}

if (isset($etype['elements'])) {

$this->elements[$type]['elements'] =

$etype['elements'];

}

if (isset($etype['extensionBase'])) {

$this->elements[$type]['extensionBase']

= $etype['extensionBase'];

}

} elseif ($ns == 'http://www.w3.org/2001/XMLSchema')

{

$this->xdebug("in getTypeDef, element $type is

an XSD type");

$this->elements[$type]['phpType'] = 'scalar';

}

}

return $this->elements[$type];

} elseif(isset($this->attributes[$type])){

$this->xdebug("in getTypeDef, found attribute $type");

Page 437: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

281

return $this->attributes[$type];

} elseif (preg_match('/_ContainedType$/', $type)) {

$this->xdebug("in getTypeDef, have an untyped element

$type");

$typeDef['typeClass'] = 'simpleType';

$typeDef['phpType'] = 'scalar';

$typeDef['type'] =

'http://www.w3.org/2001/XMLSchema:string';

return $typeDef;

}

$this->xdebug("in getTypeDef, did not find $type");

return false;

}

/**

* returns a sample serialization of a given type, or false if no type by the given

name

*

* @param string $type name of type

* @return mixed

* @access public

Page 438: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

282

* @deprecated

*/

function serializeTypeDef($type){

//print "in sTD() for type $type<br>";

if($typeDef = $this->getTypeDef($type)){

$str .= '<'.$type;

if(is_array($typeDef['attrs'])){

foreach($typeDef['attrs'] as $attName => $data){

$str .= " $attName=\"{type = ".$data['type']."}\"";

}

}

$str .= " xmlns=\"".$this->schema['targetNamespace']."\"";

if(count($typeDef['elements']) > 0){

$str .= ">";

foreach($typeDef['elements'] as $element => $eData){

$str .= $this->serializeTypeDef($element);

}

$str .= "</$type>";

} elseif($typeDef['typeClass'] == 'element') {

$str .= "></$type>";

Page 439: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

283

} else {

$str .= "/>";

}

return $str;

}

return false;

}

/**

* returns HTML form elements that allow a user

* to enter values for creating an instance of the given type.

*

* @param string $name name for type instance

* @param string $type name of type

* @return string

* @access public

* @deprecated

*/

function typeToForm($name,$type){

// get typedef

Page 440: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

284

if($typeDef = $this->getTypeDef($type)){

// if struct

if($typeDef['phpType'] == 'struct'){

$buffer .= '<table>';

foreach($typeDef['elements'] as $child => $childDef){

$buffer .= "

<tr><td align='right'>$childDef[name] (type: ".

$this->getLocalPart($childDef['type'])."):</td>

<td><input type='text' name='parameters[".

$name."][$childDef[name]]'></td></tr>";

}

$buffer .= '</table>';

// if array

} elseif($typeDef['phpType'] == 'array'){

$buffer .= '<table>';

for($i=0;$i < 3; $i++){

$buffer .= "

<tr><td align='right'>array item (type:

$typeDef[arrayType]):</td>

<td><input type='text' name='parameters[".

$name."][]'></td></tr>";

Page 441: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

285

}

$buffer .= '</table>';

// if scalar

} else {

$buffer .= "<input type='text'

name='parameters[$name]'>";

}

} else {

$buffer .= "<input type='text' name='parameters[$name]'>";

}

return $buffer;

}

/**

* adds a complex type to the schema

*

* example: array

*

* addType(

* 'ArrayOfstring',

Page 442: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

286

* 'complexType',

* 'array',

* '',

* 'SOAP-ENC:Array',

* array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]'),

* 'xsd:string'

* );

*

* example: PHP associative array ( SOAP Struct )

*

* addType(

* 'SOAPStruct',

* 'complexType',

* 'struct',

* 'all',

* array('myVar'=> array('name'=>'myVar','type'=>'string')

* );

*

* @param name

* @param typeClass (complexType|simpleType|attribute)

Page 443: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

287

* @param phpType: currently supported are array and struct (php assoc array)

* @param compositor (all|sequence|choice)

* @param restrictionBase namespace:name

(http://schemas.xmlsoap.org/soap/encoding/:Array)

* @param elements = array ( name = array(name=>'',type=>'') )

* @param attrs = array(

* array(

* 'ref' =>

"http://schemas.xmlsoap.org/soap/encoding/:arrayType",

* "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"

* )

* )

* @param arrayType: namespace:name

(http://www.w3.org/2001/XMLSchema:string)

* @access public

* @see getTypeDef

*/

function addComplexType($name,$typeClass='complexType',

$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),

$arrayType=''){

$this->complexTypes[$name] = array(

'name' => $name,

Page 444: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

288

'typeClass' => $typeClass,

'phpType' => $phpType,

'compositor'=> $compositor,

'restrictionBase' => $restrictionBase,

'elements' => $elements,

'attrs' => $attrs,

'arrayType' => $arrayType

);

$this->xdebug("addComplexType $name:");

$this->appendDebug($this->varDump($this-

>complexTypes[$name]));

}

/**

* adds a simple type to the schema

*

* @param string $name

* @param string $restrictionBase namespace:name

(http://schemas.xmlsoap.org/soap/encoding/:Array)

* @param string $typeClass (should always be simpleType)

Page 445: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

289

* @param string $phpType (should always be scalar)

* @param array $enumeration array of values

* @access public

* @see nusoap_xmlschema

* @see getTypeDef

*/

function addSimpleType($name, $restrictionBase='', $typeClass='simpleType',

$phpType='scalar', $enumeration=array()) {

$this->simpleTypes[$name] = array(

'name' => $name,

'typeClass' => $typeClass,

'phpType' => $phpType,

'type' => $restrictionBase,

'enumeration' => $enumeration

);

$this->xdebug("addSimpleType $name:");

$this->appendDebug($this->varDump($this->simpleTypes[$name]));

}

Page 446: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

290

/**

* adds an element to the schema

*

* @param array $attrs attributes that must include name and type

* @see nusoap_xmlschema

* @access public

*/

function addElement($attrs) {

if (! $this->getPrefix($attrs['type'])) {

$attrs['type'] = $this->schemaTargetNamespace . ':' .

$attrs['type'];

}

$this->elements[ $attrs['name'] ] = $attrs;

$this->elements[ $attrs['name'] ]['typeClass'] = 'element';

$this->xdebug("addElement " . $attrs['name']);

$this->appendDebug($this->varDump($this-

>elements[ $attrs['name'] ]));

}

}

Page 447: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

291

/**

* Backward compatibility

*/

class XMLSchema extends nusoap_xmlschema {

}

?><?php

/**

* For creating serializable abstractions of native PHP types. This class

* allows element name/namespace, XSD type, and XML attributes to be

* associated with a value. This is extremely useful when WSDL is not

* used, but is also useful when WSDL is used with polymorphic types, including

* xsd:anyType and user-defined types.

*

* @author Dietrich Ayala <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class soapval extends nusoap_base {

Page 448: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

292

/**

* The XML element name

*

* @var string

* @access private

*/

var $name;

/**

* The XML type name (string or false)

*

* @var mixed

* @access private

*/

var $type;

/**

* The PHP value

*

* @var mixed

* @access private

*/

Page 449: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

293

var $value;

/**

* The XML element namespace (string or false)

*

* @var mixed

* @access private

*/

var $element_ns;

/**

* The XML type namespace (string or false)

*

* @var mixed

* @access private

*/

var $type_ns;

/**

* The XML element attributes (array or false)

*

* @var mixed

* @access private

Page 450: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

294

*/

var $attributes;

/**

* constructor

*

* @param string $name optional name

* @param mixed $type optional type name

* @param mixed $value optional value

* @param mixed $element_ns optional namespace of value

* @param mixed $type_ns optional namespace of type

* @param mixed $attributes associative array of attributes to add to

element serialization

* @access public

*/

function soapval($name='soapval',$type=false,$value=-1,$element_ns=false,

$type_ns=false,$attributes=false) {

parent::nusoap_base();

$this->name = $name;

$this->type = $type;

$this->value = $value;

Page 451: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

295

$this->element_ns = $element_ns;

$this->type_ns = $type_ns;

$this->attributes = $attributes;

}

/**

* return serialized value

*

* @param string $use The WSDL use value (encoded|literal)

* @return string XML data

* @access public

*/

function serialize($use='encoded') {

return $this->serialize_val($this->value, $this->name, $this->type,

$this->element_ns, $this->type_ns, $this->attributes, $use, true);

}

/**

* decodes a soapval object into a PHP native type

*

Page 452: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

296

* @return mixed

* @access public

*/

function decode(){

return $this->value;

}

}

?><?php

/**

* transport class for sending/receiving data via HTTP and HTTPS

* NOTE: PHP must be compiled with the CURL extension for HTTPS support

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

Page 453: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

297

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class soap_transport_http extends nusoap_base {

var $url = '';

var $uri = '';

var $digest_uri = '';

var $scheme = '';

var $host = '';

var $port = '';

var $path = '';

var $request_method = 'POST';

var $protocol_version = '1.0';

var $encoding = '';

var $outgoing_headers = array();

var $incoming_headers = array();

var $incoming_cookies = array();

var $outgoing_payload = '';

var $incoming_payload = '';

Page 454: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

298

var $response_status_line; // HTTP response status line

var $useSOAPAction = true;

var $persistentConnection = false;

var $ch = false; // cURL handle

var $ch_options = array(); // cURL custom options

var $use_curl = false; // force cURL use

var $proxy = null; // proxy information (associative array)

var $username = '';

var $password = '';

var $authtype = '';

var $digestRequest = array();

var $certRequest = array(); // keys must be cainfofile (optional), sslcertfile,

sslkeyfile, passphrase, certpassword (optional), verifypeer (optional), verifyhost

(optional)

// cainfofile: certificate

authority file, e.g. '$pathToPemFiles/rootca.pem'

// sslcertfile: SSL

certificate file, e.g. '$pathToPemFiles/mycert.pem'

// sslkeyfile: SSL key file,

e.g. '$pathToPemFiles/mykey.pem'

// passphrase: SSL key

password/passphrase

Page 455: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

299

// certpassword: SSL

certificate password

// verifypeer: default is 1

// verifyhost: default is 1

/**

* constructor

*

* @param string $url The URL to which to connect

* @param array $curl_options User-specified cURL options

* @param boolean $use_curl Whether to try to force cURL use

* @access public

*/

function soap_transport_http($url, $curl_options = NULL, $use_curl = false){

parent::nusoap_base();

$this->debug("ctor url=$url use_curl=$use_curl curl_options:");

$this->appendDebug($this->varDump($curl_options));

$this->setURL($url);

if (is_array($curl_options)) {

$this->ch_options = $curl_options;

}

Page 456: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

300

$this->use_curl = $use_curl;

preg_match('/\$Revisio' . 'n: ([^ ]+)/', $this->revision, $rev);

$this->setHeader('User-Agent', $this->title.'/'.$this->version.' ('.

$rev[1].')');

}

/**

* sets a cURL option

*

* @param mixed $option The cURL option (always integer?)

* @param mixed $value The cURL option value

* @access private

*/

function setCurlOption($option, $value) {

$this->debug("setCurlOption option=$option, value=");

$this->appendDebug($this->varDump($value));

curl_setopt($this->ch, $option, $value);

}

/**

Page 457: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

301

* sets an HTTP header

*

* @param string $name The name of the header

* @param string $value The value of the header

* @access private

*/

function setHeader($name, $value) {

$this->outgoing_headers[$name] = $value;

$this->debug("set header $name: $value");

}

/**

* unsets an HTTP header

*

* @param string $name The name of the header

* @access private

*/

function unsetHeader($name) {

if (isset($this->outgoing_headers[$name])) {

$this->debug("unset header $name");

Page 458: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

302

unset($this->outgoing_headers[$name]);

}

}

/**

* sets the URL to which to connect

*

* @param string $url The URL to which to connect

* @access private

*/

function setURL($url) {

$this->url = $url;

$u = parse_url($url);

foreach($u as $k => $v){

$this->debug("parsed URL $k = $v");

$this->$k = $v;

}

// add any GET params to path

Page 459: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

303

if(isset($u['query']) && $u['query'] != ''){

$this->path .= '?' . $u['query'];

}

// set default port

if(!isset($u['port'])){

if($u['scheme'] == 'https'){

$this->port = 443;

} else {

$this->port = 80;

}

}

$this->uri = $this->path;

$this->digest_uri = $this->uri;

// build headers

if (!isset($u['port'])) {

$this->setHeader('Host', $this->host);

} else {

Page 460: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

304

$this->setHeader('Host', $this->host.':'.$this->port);

}

if (isset($u['user']) && $u['user'] != '') {

$this->setCredentials(urldecode($u['user']), isset($u['pass']) ?

urldecode($u['pass']) : '');

}

}

/**

* gets the I/O method to use

*

* @return string I/O method to use (socket|curl|unknown)

* @access private

*/

function io_method() {

if ($this->use_curl || ($this->scheme == 'https') || ($this->scheme ==

'http' && $this->authtype == 'ntlm') || ($this->scheme == 'http' && is_array($this-

>proxy) && $this->proxy['authtype'] == 'ntlm'))

return 'curl';

Page 461: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

305

if (($this->scheme == 'http' || $this->scheme == 'ssl') && $this-

>authtype != 'ntlm' && (!is_array($this->proxy) || $this->proxy['authtype'] != 'ntlm'))

return 'socket';

return 'unknown';

}

/**

* establish an HTTP connection

*

* @param integer $timeout set connection timeout in seconds

* @param integer $response_timeout set response timeout in seconds

* @return boolean true if connected, false if not

* @access private

*/

function connect($connection_timeout=0,$response_timeout=30){

// For PHP 4.3 with OpenSSL, change https scheme to ssl, then treat

like

// "regular" socket.

// TODO: disabled for now because OpenSSL must be *compiled* in

(not just

// loaded), and until PHP5 stream_get_wrappers is not available.

Page 462: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

306

// if ($this->scheme == 'https') {

// if (version_compare(phpversion(), '4.3.0') >= 0) {

// if (extension_loaded('openssl')) {

// $this->scheme = 'ssl';

// $this->debug('Using SSL over OpenSSL');

// }

// }

// }

$this->debug("connect connection_timeout $connection_timeout,

response_timeout $response_timeout, scheme $this->scheme, host $this->host, port

$this->port");

if ($this->io_method() == 'socket') {

if (!is_array($this->proxy)) {

$host = $this->host;

$port = $this->port;

} else {

$host = $this->proxy['host'];

$port = $this->proxy['port'];

}

// use persistent connection

Page 463: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

307

if($this->persistentConnection && isset($this->fp) &&

is_resource($this->fp)){

if (!feof($this->fp)) {

$this->debug('Re-use persistent connection');

return true;

}

fclose($this->fp);

$this->debug('Closed persistent connection at EOF');

}

// munge host if using OpenSSL

if ($this->scheme == 'ssl') {

$host = 'ssl://' . $host;

}

$this->debug('calling fsockopen with host ' . $host . '

connection_timeout ' . $connection_timeout);

// open socket

if($connection_timeout > 0){

$this->fp = @fsockopen( $host, $this->port, $this->errno,

$this->error_str, $connection_timeout);

Page 464: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

308

} else {

$this->fp = @fsockopen( $host, $this->port, $this->errno,

$this->error_str);

}

// test pointer

if(!$this->fp) {

$msg = 'Couldn\'t open socket connection to server ' . $this-

>url;

if ($this->errno) {

$msg .= ', Error ('.$this->errno.'): '.$this->error_str;

} else {

$msg .= ' prior to connect(). This is often a problem

looking up the host name.';

}

$this->debug($msg);

$this->setError($msg);

return false;

}

// set response timeout

Page 465: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

309

$this->debug('set response timeout to ' . $response_timeout);

socket_set_timeout( $this->fp, $response_timeout);

$this->debug('socket connected');

return true;

} else if ($this->io_method() == 'curl') {

if (!extension_loaded('curl')) {

// $this->setError('cURL Extension, or OpenSSL extension w/

PHP version >= 4.3 is required for HTTPS');

$this->setError('The PHP cURL Extension is required for

HTTPS or NLTM. You will need to re-build or update your PHP to include cURL or

change php.ini to load the PHP cURL extension.');

return false;

}

// Avoid warnings when PHP does not have these options

if (defined('CURLOPT_CONNECTIONTIMEOUT'))

$CURLOPT_CONNECTIONTIMEOUT =

CURLOPT_CONNECTIONTIMEOUT;

else

$CURLOPT_CONNECTIONTIMEOUT = 78;

if (defined('CURLOPT_HTTPAUTH'))

Page 466: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

310

$CURLOPT_HTTPAUTH = CURLOPT_HTTPAUTH;

else

$CURLOPT_HTTPAUTH = 107;

if (defined('CURLOPT_PROXYAUTH'))

$CURLOPT_PROXYAUTH = CURLOPT_PROXYAUTH;

else

$CURLOPT_PROXYAUTH = 111;

if (defined('CURLAUTH_BASIC'))

$CURLAUTH_BASIC = CURLAUTH_BASIC;

else

$CURLAUTH_BASIC = 1;

if (defined('CURLAUTH_DIGEST'))

$CURLAUTH_DIGEST = CURLAUTH_DIGEST;

else

$CURLAUTH_DIGEST = 2;

if (defined('CURLAUTH_NTLM'))

$CURLAUTH_NTLM = CURLAUTH_NTLM;

else

$CURLAUTH_NTLM = 8;

Page 467: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

311

$this->debug('connect using cURL');

// init CURL

$this->ch = curl_init();

// set url

$hostURL = ($this->port != '') ? "$this->scheme://$this->host:$this-

>port" : "$this->scheme://$this->host";

// add path

$hostURL .= $this->path;

$this->setCurlOption(CURLOPT_URL, $hostURL);

// follow location headers (re-directs)

if (ini_get('safe_mode') || ini_get('open_basedir')) {

$this->debug('safe_mode or open_basedir set, so do not set

CURLOPT_FOLLOWLOCATION');

$this->debug('safe_mode = ');

$this->appendDebug($this->varDump(ini_get('safe_mode')));

$this->debug('open_basedir = ');

$this->appendDebug($this-

>varDump(ini_get('open_basedir')));

} else {

$this->setCurlOption(CURLOPT_FOLLOWLOCATION, 1);

}

Page 468: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

312

// ask for headers in the response output

$this->setCurlOption(CURLOPT_HEADER, 1);

// ask for the response output as the return value

$this->setCurlOption(CURLOPT_RETURNTRANSFER, 1);

// encode

// We manage this ourselves through headers and encoding

// if(function_exists('gzuncompress')){

// $this->setCurlOption(CURLOPT_ENCODING, 'deflate');

// }

// persistent connection

if ($this->persistentConnection) {

// I believe the following comment is now bogus, having

applied to

// the code when it used CURLOPT_CUSTOMREQUEST to

send the request.

// The way we send data, we cannot use persistent connections,

since

// there will be some "junk" at the end of our request.

//$this->setCurlOption(CURL_HTTP_VERSION_1_1, true);

$this->persistentConnection = false;

$this->setHeader('Connection', 'close');

Page 469: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

313

}

// set timeouts

if ($connection_timeout != 0) {

$this->setCurlOption($CURLOPT_CONNECTIONTIMEOUT,

$connection_timeout);

}

if ($response_timeout != 0) {

$this->setCurlOption(CURLOPT_TIMEOUT,

$response_timeout);

}

if ($this->scheme == 'https') {

$this->debug('set cURL SSL verify options');

// recent versions of cURL turn on peer/host checking by

default,

// while PHP binaries are not compiled with a default location

for the

// CA cert bundle, so disable peer/host checking.

//$this->setCurlOption(CURLOPT_CAINFO, 'f:\php-4.3.2-

win32\extensions\curl-ca-bundle.crt');

$this->setCurlOption(CURLOPT_SSL_VERIFYPEER, 0);

$this->setCurlOption(CURLOPT_SSL_VERIFYHOST, 0);

Page 470: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

314

// support client certificates (thanks Tobias Boes, Doug

Anarino, Eryan Ariobowo)

if ($this->authtype == 'certificate') {

$this->debug('set cURL certificate options');

if (isset($this->certRequest['cainfofile'])) {

$this->setCurlOption(CURLOPT_CAINFO,

$this->certRequest['cainfofile']);

}

if (isset($this->certRequest['verifypeer'])) {

$this-

>setCurlOption(CURLOPT_SSL_VERIFYPEER, $this->certRequest['verifypeer']);

} else {

$this-

>setCurlOption(CURLOPT_SSL_VERIFYPEER, 1);

}

if (isset($this->certRequest['verifyhost'])) {

$this-

>setCurlOption(CURLOPT_SSL_VERIFYHOST, $this->certRequest['verifyhost']);

} else {

$this-

>setCurlOption(CURLOPT_SSL_VERIFYHOST, 1);

Page 471: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

315

}

if (isset($this->certRequest['sslcertfile'])) {

$this->setCurlOption(CURLOPT_SSLCERT,

$this->certRequest['sslcertfile']);

}

if (isset($this->certRequest['sslkeyfile'])) {

$this->setCurlOption(CURLOPT_SSLKEY,

$this->certRequest['sslkeyfile']);

}

if (isset($this->certRequest['passphrase'])) {

$this-

>setCurlOption(CURLOPT_SSLKEYPASSWD, $this->certRequest['passphrase']);

}

if (isset($this->certRequest['certpassword'])) {

$this-

>setCurlOption(CURLOPT_SSLCERTPASSWD, $this-

>certRequest['certpassword']);

}

}

}

if ($this->authtype && ($this->authtype != 'certificate')) {

if ($this->username) {

Page 472: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

316

$this->debug('set cURL username/password');

$this->setCurlOption(CURLOPT_USERPWD, "$this-

>username:$this->password");

}

if ($this->authtype == 'basic') {

$this->debug('set cURL for Basic authentication');

$this->setCurlOption($CURLOPT_HTTPAUTH,

$CURLAUTH_BASIC);

}

if ($this->authtype == 'digest') {

$this->debug('set cURL for digest authentication');

$this->setCurlOption($CURLOPT_HTTPAUTH,

$CURLAUTH_DIGEST);

}

if ($this->authtype == 'ntlm') {

$this->debug('set cURL for NTLM authentication');

$this->setCurlOption($CURLOPT_HTTPAUTH,

$CURLAUTH_NTLM);

}

}

if (is_array($this->proxy)) {

Page 473: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

317

$this->debug('set cURL proxy options');

if ($this->proxy['port'] != '') {

$this->setCurlOption(CURLOPT_PROXY, $this-

>proxy['host'].':'.$this->proxy['port']);

} else {

$this->setCurlOption(CURLOPT_PROXY, $this-

>proxy['host']);

}

if ($this->proxy['username'] || $this->proxy['password']) {

$this->debug('set cURL proxy authentication options');

$this->setCurlOption(CURLOPT_PROXYUSERPWD,

$this->proxy['username'].':'.$this->proxy['password']);

if ($this->proxy['authtype'] == 'basic') {

$this-

>setCurlOption($CURLOPT_PROXYAUTH, $CURLAUTH_BASIC);

}

if ($this->proxy['authtype'] == 'ntlm') {

$this-

>setCurlOption($CURLOPT_PROXYAUTH, $CURLAUTH_NTLM);

}

}

}

Page 474: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

318

$this->debug('cURL connection set up');

return true;

} else {

$this->setError('Unknown scheme ' . $this->scheme);

$this->debug('Unknown scheme ' . $this->scheme);

return false;

}

}

/**

* sends the SOAP request and gets the SOAP response via HTTP[S]

*

* @param string $data message data

* @param integer $timeout set connection timeout in seconds

* @param integer $response_timeout set response timeout in seconds

* @param array $cookies cookies to send

* @return string data

* @access public

*/

function send($data, $timeout=0, $response_timeout=30, $cookies=NULL) {

Page 475: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

319

$this->debug('entered send() with data of length: '.strlen($data));

$this->tryagain = true;

$tries = 0;

while ($this->tryagain) {

$this->tryagain = false;

if ($tries++ < 2) {

// make connnection

if (!$this->connect($timeout, $response_timeout)){

return false;

}

// send request

if (!$this->sendRequest($data, $cookies)){

return false;

}

// get response

$respdata = $this->getResponse();

Page 476: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

320

} else {

$this->setError("Too many tries to get an OK response

($this->response_status_line)");

}

}

$this->debug('end of send()');

return $respdata;

}

/**

* sends the SOAP request and gets the SOAP response via HTTPS using

CURL

*

* @param string $data message data

* @param integer $timeout set connection timeout in seconds

* @param integer $response_timeout set response timeout in seconds

* @param array $cookies cookies to send

* @return string data

* @access public

* @deprecated

Page 477: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

321

*/

function sendHTTPS($data, $timeout=0, $response_timeout=30, $cookies) {

return $this->send($data, $timeout, $response_timeout, $cookies);

}

/**

* if authenticating, set user credentials here

*

* @param string $username

* @param string $password

* @param string $authtype (basic|digest|certificate|ntlm)

* @param array $digestRequest (keys must be nonce, nc, realm, qop)

* @param array $certRequest (keys must be cainfofile (optional),

sslcertfile, sslkeyfile, passphrase, certpassword (optional), verifypeer (optional),

verifyhost (optional): see corresponding options in cURL docs)

* @access public

*/

function setCredentials($username, $password, $authtype = 'basic',

$digestRequest = array(), $certRequest = array()) {

$this->debug("setCredentials username=$username

authtype=$authtype digestRequest=");

Page 478: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

322

$this->appendDebug($this->varDump($digestRequest));

$this->debug("certRequest=");

$this->appendDebug($this->varDump($certRequest));

// cf. RFC 2617

if ($authtype == 'basic') {

$this->setHeader('Authorization', 'Basic

'.base64_encode(str_replace(':','',$username).':'.$password));

} elseif ($authtype == 'digest') {

if (isset($digestRequest['nonce'])) {

$digestRequest['nc'] = isset($digestRequest['nc']) ?

$digestRequest['nc']++ : 1;

// calculate the Digest hashes (calculate code based on

digest implementation found at:

http://www.rassoc.com/gregr/weblog/stories/2002/07/09/webServicesSecurityHttpDig

estAuthenticationWithoutActiveDirectory.html)

// A1 = unq(username-value) ":" unq(realm-value) ":"

passwd

$A1 = $username. ':' . (isset($digestRequest['realm']) ?

$digestRequest['realm'] : '') . ':' . $password;

Page 479: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

323

// H(A1) = MD5(A1)

$HA1 = md5($A1);

// A2 = Method ":" digest-uri-value

$A2 = $this->request_method . ':' . $this->digest_uri;

// H(A2)

$HA2 = md5($A2);

// KD(secret, data) = H(concat(secret, ":", data))

// if qop == auth:

// request-digest = <"> < KD ( H(A1), unq(nonce-

value)

// ":" nc-value

// ":" unq(cnonce-value)

// ":" unq(qop-value)

// ":" H(A2)

// ) <">

// if qop is missing,

// request-digest = <"> < KD ( H(A1), unq(nonce-

value) ":" H(A2) ) > <">

Page 480: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

324

$unhashedDigest = '';

$nonce = isset($digestRequest['nonce']) ?

$digestRequest['nonce'] : '';

$cnonce = $nonce;

if ($digestRequest['qop'] != '') {

$unhashedDigest = $HA1 . ':' . $nonce . ':' .

sprintf("%08d", $digestRequest['nc']) . ':' . $cnonce . ':' . $digestRequest['qop'] . ':' .

$HA2;

} else {

$unhashedDigest = $HA1 . ':' . $nonce . ':' .

$HA2;

}

$hashedDigest = md5($unhashedDigest);

$opaque = '';

if (isset($digestRequest['opaque'])) {

$opaque = ', opaque="' .

$digestRequest['opaque'] . '"';

}

Page 481: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

325

$this->setHeader('Authorization', 'Digest username="' .

$username . '", realm="' . $digestRequest['realm'] . '", nonce="' . $nonce . '", uri="' .

$this->digest_uri . $opaque . '", cnonce="' . $cnonce . '", nc=' . sprintf("%08x",

$digestRequest['nc']) . ', qop="' . $digestRequest['qop'] . '", response="' .

$hashedDigest . '"');

}

} elseif ($authtype == 'certificate') {

$this->certRequest = $certRequest;

$this->debug('Authorization header not set for certificate');

} elseif ($authtype == 'ntlm') {

// do nothing

$this->debug('Authorization header not set for ntlm');

}

$this->username = $username;

$this->password = $password;

$this->authtype = $authtype;

$this->digestRequest = $digestRequest;

}

/**

* set the soapaction value

Page 482: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

326

*

* @param string $soapaction

* @access public

*/

function setSOAPAction($soapaction) {

$this->setHeader('SOAPAction', '"' . $soapaction . '"');

}

/**

* use http encoding

*

* @param string $enc encoding style. supported values: gzip, deflate, or

both

* @access public

*/

function setEncoding($enc='gzip, deflate') {

if (function_exists('gzdeflate')) {

$this->protocol_version = '1.1';

$this->setHeader('Accept-Encoding', $enc);

if (!isset($this->outgoing_headers['Connection'])) {

Page 483: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

327

$this->setHeader('Connection', 'close');

$this->persistentConnection = false;

}

// deprecated as of PHP 5.3.0

//set_magic_quotes_runtime(0);

$this->encoding = $enc;

}

}

/**

* set proxy info here

*

* @param string $proxyhost use an empty string to remove proxy

* @param string $proxyport

* @param string $proxyusername

* @param string $proxypassword

* @param string $proxyauthtype (basic|ntlm)

* @access public

*/

Page 484: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

328

function setProxy($proxyhost, $proxyport, $proxyusername = '',

$proxypassword = '', $proxyauthtype = 'basic') {

if ($proxyhost) {

$this->proxy = array(

'host' => $proxyhost,

'port' => $proxyport,

'username' => $proxyusername,

'password' => $proxypassword,

'authtype' => $proxyauthtype

);

if ($proxyusername != '' && $proxypassword != '' &&

$proxyauthtype = 'basic') {

$this->setHeader('Proxy-Authorization', ' Basic

'.base64_encode($proxyusername.':'.$proxypassword));

}

} else {

$this->debug('remove proxy');

$proxy = null;

unsetHeader('Proxy-Authorization');

}

}

Page 485: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

329

/**

* Test if the given string starts with a header that is to be skipped.

* Skippable headers result from chunked transfer and proxy requests.

*

* @param string $data The string to check.

* @returns boolean Whether a skippable header was found.

* @access private

*/

function isSkippableCurlHeader(&$data) {

$skipHeaders = array( 'HTTP/1.1 100',

'HTTP/1.0 301',

'HTTP/1.1 301',

'HTTP/1.0 302',

'HTTP/1.1 302',

'HTTP/1.0 401',

'HTTP/1.1 401',

'HTTP/1.0 200 Connection

established');

Page 486: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

330

foreach ($skipHeaders as $hd) {

$prefix = substr($data, 0, strlen($hd));

if ($prefix == $hd) return true;

}

return false;

}

/**

* decode a string that is encoded w/ "chunked' transfer encoding

* as defined in RFC2068 19.4.6

*

* @param string $buffer

* @param string $lb

* @returns string

* @access public

* @deprecated

*/

function decodeChunked($buffer, $lb){

// length := 0

Page 487: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

331

$length = 0;

$new = '';

// read chunk-size, chunk-extension (if any) and CRLF

// get the position of the linebreak

$chunkend = strpos($buffer, $lb);

if ($chunkend == FALSE) {

$this->debug('no linebreak found in decodeChunked');

return $new;

}

$temp = substr($buffer,0,$chunkend);

$chunk_size = hexdec( trim($temp) );

$chunkstart = $chunkend + strlen($lb);

// while (chunk-size > 0) {

while ($chunk_size > 0) {

$this->debug("chunkstart: $chunkstart chunk_size:

$chunk_size");

$chunkend = strpos( $buffer, $lb, $chunkstart + $chunk_size);

// Just in case we got a broken connection

Page 488: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

332

if ($chunkend == FALSE) {

$chunk = substr($buffer,$chunkstart);

// append chunk-data to entity-body

$new .= $chunk;

$length += strlen($chunk);

break;

}

// read chunk-data and CRLF

$chunk = substr($buffer,$chunkstart,$chunkend-$chunkstart);

// append chunk-data to entity-body

$new .= $chunk;

// length := length + chunk-size

$length += strlen($chunk);

// read chunk-size and CRLF

$chunkstart = $chunkend + strlen($lb);

$chunkend = strpos($buffer, $lb, $chunkstart) + strlen($lb);

if ($chunkend == FALSE) {

break; //Just in case we got a broken connection

Page 489: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

333

}

$temp = substr($buffer,$chunkstart,$chunkend-$chunkstart);

$chunk_size = hexdec( trim($temp) );

$chunkstart = $chunkend;

}

return $new;

}

/**

* Writes the payload, including HTTP headers, to $this->outgoing_payload.

*

* @param string $data HTTP body

* @param string $cookie_str data for HTTP Cookie header

* @return void

* @access private

*/

function buildPayload($data, $cookie_str = '') {

// Note: for cURL connections, $this->outgoing_payload is ignored,

// as is the Content-Length header, but these are still created as

// debugging guides.

Page 490: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

334

// add content-length header

if ($this->request_method != 'GET') {

$this->setHeader('Content-Length', strlen($data));

}

// start building outgoing payload:

if ($this->proxy) {

$uri = $this->url;

} else {

$uri = $this->uri;

}

$req = "$this->request_method $uri HTTP/$this->protocol_version";

$this->debug("HTTP request: $req");

$this->outgoing_payload = "$req\r\n";

// loop thru headers, serializing

foreach($this->outgoing_headers as $k => $v){

$hdr = $k.': '.$v;

$this->debug("HTTP header: $hdr");

Page 491: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

335

$this->outgoing_payload .= "$hdr\r\n";

}

// add any cookies

if ($cookie_str != '') {

$hdr = 'Cookie: '.$cookie_str;

$this->debug("HTTP header: $hdr");

$this->outgoing_payload .= "$hdr\r\n";

}

// header/body separator

$this->outgoing_payload .= "\r\n";

// add data

$this->outgoing_payload .= $data;

}

/**

* sends the SOAP request via HTTP[S]

*

Page 492: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

336

* @param string $data message data

* @param array $cookies cookies to send

* @return boolean true if OK, false if problem

* @access private

*/

function sendRequest($data, $cookies = NULL) {

// build cookie string

$cookie_str = $this->getCookiesForRequest($cookies, (($this->scheme

== 'ssl') || ($this->scheme == 'https')));

// build payload

$this->buildPayload($data, $cookie_str);

if ($this->io_method() == 'socket') {

// send payload

if(!fputs($this->fp, $this->outgoing_payload, strlen($this-

>outgoing_payload))) {

$this->setError('couldn\'t write message data to socket');

$this->debug('couldn\'t write message data to socket');

return false;

}

Page 493: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

337

$this->debug('wrote data to socket, length = ' . strlen($this-

>outgoing_payload));

return true;

} else if ($this->io_method() == 'curl') {

// set payload

// cURL does say this should only be the verb, and in fact it

// turns out that the URI and HTTP version are appended to this, which

// some servers refuse to work with (so we no longer use this method!)

//$this->setCurlOption(CURLOPT_CUSTOMREQUEST, $this-

>outgoing_payload);

$curl_headers = array();

foreach($this->outgoing_headers as $k => $v){

if ($k == 'Connection' || $k == 'Content-Length' || $k == 'Host' ||

$k == 'Authorization' || $k == 'Proxy-Authorization') {

$this->debug("Skip cURL header $k: $v");

} else {

$curl_headers[] = "$k: $v";

}

}

if ($cookie_str != '') {

$curl_headers[] = 'Cookie: ' . $cookie_str;

Page 494: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

338

}

$this->setCurlOption(CURLOPT_HTTPHEADER, $curl_headers);

$this->debug('set cURL HTTP headers');

if ($this->request_method == "POST") {

$this->setCurlOption(CURLOPT_POST, 1);

$this->setCurlOption(CURLOPT_POSTFIELDS, $data);

$this->debug('set cURL POST data');

} else {

}

// insert custom user-set cURL options

foreach ($this->ch_options as $key => $val) {

$this->setCurlOption($key, $val);

}

$this->debug('set cURL payload');

return true;

}

}

/**

Page 495: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

339

* gets the SOAP response via HTTP[S]

*

* @return string the response (also sets member variables like

incoming_payload)

* @access private

*/

function getResponse(){

$this->incoming_payload = '';

if ($this->io_method() == 'socket') {

// loop until headers have been retrieved

$data = '';

while (!isset($lb)){

// We might EOF during header read.

if(feof($this->fp)) {

$this->incoming_payload = $data;

$this->debug('found no headers before EOF after length

' . strlen($data));

$this->debug("received before EOF:\n" . $data);

$this->setError('server failed to send headers');

Page 496: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

340

return false;

}

$tmp = fgets($this->fp, 256);

$tmplen = strlen($tmp);

$this->debug("read line of $tmplen bytes: " . trim($tmp));

if ($tmplen == 0) {

$this->incoming_payload = $data;

$this->debug('socket read of headers timed out after

length ' . strlen($data));

$this->debug("read before timeout: " . $data);

$this->setError('socket read of headers timed out');

return false;

}

$data .= $tmp;

$pos = strpos($data,"\r\n\r\n");

if($pos > 1){

$lb = "\r\n";

Page 497: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

341

} else {

$pos = strpos($data,"\n\n");

if($pos > 1){

$lb = "\n";

}

}

// remove 100 headers

if (isset($lb) && preg_match('/^HTTP\/1.1 100/',$data)) {

unset($lb);

$data = '';

}//

}

// store header data

$this->incoming_payload .= $data;

$this->debug('found end of headers after length ' . strlen($data));

// process headers

$header_data = trim(substr($data,0,$pos));

$header_array = explode($lb,$header_data);

$this->incoming_headers = array();

$this->incoming_cookies = array();

Page 498: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

342

foreach($header_array as $header_line){

$arr = explode(':',$header_line, 2);

if(count($arr) > 1){

$header_name = strtolower(trim($arr[0]));

$this->incoming_headers[$header_name] =

trim($arr[1]);

if ($header_name == 'set-cookie') {

// TODO: allow multiple cookies from

parseCookie

$cookie = $this->parseCookie(trim($arr[1]));

if ($cookie) {

$this->incoming_cookies[] = $cookie;

$this->debug('found cookie: ' .

$cookie['name'] . ' = ' . $cookie['value']);

} else {

$this->debug('did not find cookie in ' .

trim($arr[1]));

}

}

} else if (isset($header_name)) {

// append continuation line to previous header

Page 499: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

343

$this->incoming_headers[$header_name] .= $lb . ' ' .

$header_line;

}

}

// loop until msg has been received

if (isset($this->incoming_headers['transfer-encoding']) &&

strtolower($this->incoming_headers['transfer-encoding']) == 'chunked') {

$content_length = 2147483647; // ignore any content-

length header

$chunked = true;

$this->debug("want to read chunked content");

} elseif (isset($this->incoming_headers['content-length'])) {

$content_length = $this->incoming_headers['content-length'];

$chunked = false;

$this->debug("want to read content of length

$content_length");

} else {

$content_length = 2147483647;

$chunked = false;

$this->debug("want to read content to EOF");

Page 500: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

344

}

$data = '';

do {

if ($chunked) {

$tmp = fgets($this->fp, 256);

$tmplen = strlen($tmp);

$this->debug("read chunk line of $tmplen bytes");

if ($tmplen == 0) {

$this->incoming_payload = $data;

$this->debug('socket read of chunk length timed

out after length ' . strlen($data));

$this->debug("read before timeout:\n" . $data);

$this->setError('socket read of chunk length

timed out');

return false;

}

$content_length = hexdec(trim($tmp));

$this->debug("chunk length $content_length");

}

$strlen = 0;

while (($strlen < $content_length) && (!feof($this->fp))) {

Page 501: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

345

$readlen = min(8192, $content_length - $strlen);

$tmp = fread($this->fp, $readlen);

$tmplen = strlen($tmp);

$this->debug("read buffer of $tmplen bytes");

if (($tmplen == 0) && (!feof($this->fp))) {

$this->incoming_payload = $data;

$this->debug('socket read of body timed out

after length ' . strlen($data));

$this->debug("read before timeout:\n" . $data);

$this->setError('socket read of body timed out');

return false;

}

$strlen += $tmplen;

$data .= $tmp;

}

if ($chunked && ($content_length > 0)) {

$tmp = fgets($this->fp, 256);

$tmplen = strlen($tmp);

$this->debug("read chunk terminator of $tmplen

bytes");

if ($tmplen == 0) {

Page 502: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

346

$this->incoming_payload = $data;

$this->debug('socket read of chunk terminator

timed out after length ' . strlen($data));

$this->debug("read before timeout:\n" . $data);

$this->setError('socket read of chunk terminator

timed out');

return false;

}

}

} while ($chunked && ($content_length > 0) && (!feof($this->fp)));

if (feof($this->fp)) {

$this->debug('read to EOF');

}

$this->debug('read body of length ' . strlen($data));

$this->incoming_payload .= $data;

$this->debug('received a total of '.strlen($this->incoming_payload).'

bytes of data from server');

// close filepointer

if(

Page 503: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

347

(isset($this->incoming_headers['connection']) &&

strtolower($this->incoming_headers['connection']) == 'close') ||

(! $this->persistentConnection) || feof($this->fp)){

fclose($this->fp);

$this->fp = false;

$this->debug('closed socket');

}

// connection was closed unexpectedly

if($this->incoming_payload == ''){

$this->setError('no response from server');

return false;

}

// decode transfer-encoding

// if(isset($this->incoming_headers['transfer-encoding']) &&

strtolower($this->incoming_headers['transfer-encoding']) == 'chunked'){

// if(!$data = $this->decodeChunked($data, $lb)){

// $this->setError('Decoding of chunked data failed');

// return false;

// }

Page 504: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

348

//print "<pre>\nde-

chunked:\n---------------\n$data\n\n---------------\n</pre>";

// set decoded payload

// $this->incoming_payload = $header_data.$lb.$lb.$data;

// }

} else if ($this->io_method() == 'curl') {

// send and receive

$this->debug('send and receive with cURL');

$this->incoming_payload = curl_exec($this->ch);

$data = $this->incoming_payload;

$cErr = curl_error($this->ch);

if ($cErr != '') {

$err = 'cURL ERROR: '.curl_errno($this->ch).': '.$cErr.'<br>';

// TODO: there is a PHP bug that can cause this to SEGV for

CURLINFO_CONTENT_TYPE

foreach(curl_getinfo($this->ch) as $k => $v){

$err .= "$k: $v<br>";

}

$this->debug($err);

Page 505: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

349

$this->setError($err);

curl_close($this->ch);

return false;

} else {

//echo '<pre>';

//var_dump(curl_getinfo($this->ch));

//echo '</pre>';

}

// close curl

$this->debug('No cURL error, closing cURL');

curl_close($this->ch);

// try removing skippable headers

$savedata = $data;

while ($this->isSkippableCurlHeader($data)) {

$this->debug("Found HTTP header to skip");

if ($pos = strpos($data,"\r\n\r\n")) {

$data = ltrim(substr($data,$pos));

} elseif($pos = strpos($data,"\n\n") ) {

$data = ltrim(substr($data,$pos));

Page 506: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

350

}

}

if ($data == '') {

// have nothing left; just remove 100 header(s)

$data = $savedata;

while (preg_match('/^HTTP\/1.1 100/',$data)) {

if ($pos = strpos($data,"\r\n\r\n")) {

$data = ltrim(substr($data,$pos));

} elseif($pos = strpos($data,"\n\n") ) {

$data = ltrim(substr($data,$pos));

}

}

}

// separate content from HTTP headers

if ($pos = strpos($data,"\r\n\r\n")) {

$lb = "\r\n";

} elseif( $pos = strpos($data,"\n\n")) {

$lb = "\n";

Page 507: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

351

} else {

$this->debug('no proper separation of headers and document');

$this->setError('no proper separation of headers and

document');

return false;

}

$header_data = trim(substr($data,0,$pos));

$header_array = explode($lb,$header_data);

$data = ltrim(substr($data,$pos));

$this->debug('found proper separation of headers and document');

$this->debug('cleaned data, stringlen: '.strlen($data));

// clean headers

foreach ($header_array as $header_line) {

$arr = explode(':',$header_line,2);

if(count($arr) > 1){

$header_name = strtolower(trim($arr[0]));

$this->incoming_headers[$header_name] =

trim($arr[1]);

if ($header_name == 'set-cookie') {

// TODO: allow multiple cookies from

parseCookie

Page 508: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

352

$cookie = $this->parseCookie(trim($arr[1]));

if ($cookie) {

$this->incoming_cookies[] = $cookie;

$this->debug('found cookie: ' .

$cookie['name'] . ' = ' . $cookie['value']);

} else {

$this->debug('did not find cookie in ' .

trim($arr[1]));

}

}

} else if (isset($header_name)) {

// append continuation line to previous header

$this->incoming_headers[$header_name] .= $lb . ' ' .

$header_line;

}

}

}

$this->response_status_line = $header_array[0];

$arr = explode(' ', $this->response_status_line, 3);

$http_version = $arr[0];

Page 509: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

353

$http_status = intval($arr[1]);

$http_reason = count($arr) > 2 ? $arr[2] : '';

// see if we need to resend the request with http digest authentication

if (isset($this->incoming_headers['location']) && ($http_status == 301

|| $http_status == 302)) {

$this->debug("Got $http_status $http_reason with Location: " .

$this->incoming_headers['location']);

$this->setURL($this->incoming_headers['location']);

$this->tryagain = true;

return false;

}

// see if we need to resend the request with http digest authentication

if (isset($this->incoming_headers['www-authenticate']) &&

$http_status == 401) {

$this->debug("Got 401 $http_reason with WWW-Authenticate:

" . $this->incoming_headers['www-authenticate']);

if (strstr($this->incoming_headers['www-authenticate'], "Digest

")) {

$this->debug('Server wants digest authentication');

// remove "Digest " from our elements

Page 510: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

354

$digestString = str_replace('Digest ', '', $this-

>incoming_headers['www-authenticate']);

// parse elements into array

$digestElements = explode(',', $digestString);

foreach ($digestElements as $val) {

$tempElement = explode('=', trim($val), 2);

$digestRequest[$tempElement[0]] =

str_replace("\"", '', $tempElement[1]);

}

// should have (at least) qop, realm, nonce

if (isset($digestRequest['nonce'])) {

$this->setCredentials($this->username, $this-

>password, 'digest', $digestRequest);

$this->tryagain = true;

return false;

}

}

$this->debug('HTTP authentication failed');

$this->setError('HTTP authentication failed');

Page 511: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

355

return false;

}

if (

($http_status >= 300 && $http_status <= 307) ||

($http_status >= 400 && $http_status <= 417) ||

($http_status >= 501 && $http_status <= 505)

) {

$this->setError("Unsupported HTTP response status

$http_status $http_reason (soapclient->response has contents of the response)");

return false;

}

// decode content-encoding

if(isset($this->incoming_headers['content-encoding']) && $this-

>incoming_headers['content-encoding'] != ''){

if(strtolower($this->incoming_headers['content-encoding']) ==

'deflate' || strtolower($this->incoming_headers['content-encoding']) == 'gzip'){

// if decoding works, use it. else assume data wasn't gzencoded

if(function_exists('gzinflate')){

//$timer->setMarker('starting decoding of

gzip/deflated content');

// IIS 5 requires gzinflate instead of

gzuncompress (similar to IE 5 and gzdeflate v. gzcompress)

Page 512: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

356

// this means there are no Zlib headers, although

there should be

$this->debug('The gzinflate function exists');

$datalen = strlen($data);

if ($this->incoming_headers['content-encoding']

== 'deflate') {

if ($degzdata = @gzinflate($data)) {

$data = $degzdata;

$this->debug('The payload has been

inflated to ' . strlen($data) . ' bytes');

if (strlen($data) < $datalen) {

// test for the case that the payload

has been compressed twice

$this->debug('The inflated

payload is smaller than the gzipped one; try again');

if ($degzdata =

@gzinflate($data)) {

$data = $degzdata;

$this->debug('The payload

has been inflated again to ' . strlen($data) . ' bytes');

}

}

Page 513: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

357

} else {

$this->debug('Error using gzinflate to

inflate the payload');

$this->setError('Error using gzinflate to

inflate the payload');

}

} elseif ($this->incoming_headers['content-

encoding'] == 'gzip') {

if ($degzdata = @gzinflate(substr($data,

10))) { // do our best

$data = $degzdata;

$this->debug('The payload has been un-

gzipped to ' . strlen($data) . ' bytes');

if (strlen($data) < $datalen) {

// test for the case that the payload

has been compressed twice

$this->debug('The un-gzipped

payload is smaller than the gzipped one; try again');

if ($degzdata =

@gzinflate(substr($data, 10))) {

$data = $degzdata;

$this->debug('The payload

has been un-gzipped again to ' . strlen($data) . ' bytes');

Page 514: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

358

}

}

} else {

$this->debug('Error using gzinflate to un-

gzip the payload');

$this->setError('Error using

gzinflate to un-gzip the payload');

}

}

//$timer->setMarker('finished decoding of

gzip/deflated content');

//print "<xmp>\nde-

inflated:\n---------------\n$data\n-------------\n</xmp>";

// set decoded payload

$this->incoming_payload = $header_data.$lb.

$lb.$data;

} else {

$this->debug('The server sent compressed data.

Your php install must have the Zlib extension compiled in to support this.');

$this->setError('The server sent compressed

data. Your php install must have the Zlib extension compiled in to support this.');

}

Page 515: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

359

} else {

$this->debug('Unsupported Content-Encoding ' . $this-

>incoming_headers['content-encoding']);

$this->setError('Unsupported Content-Encoding ' .

$this->incoming_headers['content-encoding']);

}

} else {

$this->debug('No Content-Encoding header');

}

if(strlen($data) == 0){

$this->debug('no data after headers!');

$this->setError('no data present after HTTP headers');

return false;

}

return $data;

}

/**

* sets the content-type for the SOAP message to be sent

Page 516: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

360

*

* @param string $type the content type, MIME style

* @param mixed $charset character set used for encoding (or false)

* @access public

*/

function setContentType($type, $charset = false) {

$this->setHeader('Content-Type', $type . ($charset ? '; charset=' .

$charset : ''));

}

/**

* specifies that an HTTP persistent connection should be used

*

* @return boolean whether the request was honored by this method.

* @access public

*/

function usePersistentConnection(){

if (isset($this->outgoing_headers['Accept-Encoding'])) {

return false;

}

$this->protocol_version = '1.1';

Page 517: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

361

$this->persistentConnection = true;

$this->setHeader('Connection', 'Keep-Alive');

return true;

}

/**

* parse an incoming Cookie into it's parts

*

* @param string $cookie_str content of cookie

* @return array with data of that cookie

* @access private

*/

/*

* TODO: allow a Set-Cookie string to be parsed into multiple cookies

*/

function parseCookie($cookie_str) {

$cookie_str = str_replace('; ', ';', $cookie_str) . ';';

$data = preg_split('/;/', $cookie_str);

$value_str = $data[0];

Page 518: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

362

$cookie_param = 'domain=';

$start = strpos($cookie_str, $cookie_param);

if ($start > 0) {

$domain = substr($cookie_str, $start + strlen($cookie_param));

$domain = substr($domain, 0, strpos($domain, ';'));

} else {

$domain = '';

}

$cookie_param = 'expires=';

$start = strpos($cookie_str, $cookie_param);

if ($start > 0) {

$expires = substr($cookie_str, $start + strlen($cookie_param));

$expires = substr($expires, 0, strpos($expires, ';'));

} else {

$expires = '';

}

$cookie_param = 'path=';

$start = strpos($cookie_str, $cookie_param);

Page 519: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

363

if ( $start > 0 ) {

$path = substr($cookie_str, $start + strlen($cookie_param));

$path = substr($path, 0, strpos($path, ';'));

} else {

$path = '/';

}

$cookie_param = ';secure;';

if (strpos($cookie_str, $cookie_param) !== FALSE) {

$secure = true;

} else {

$secure = false;

}

$sep_pos = strpos($value_str, '=');

if ($sep_pos) {

$name = substr($value_str, 0, $sep_pos);

$value = substr($value_str, $sep_pos + 1);

$cookie= array( 'name' => $name,

Page 520: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

364

'value' => $value,

'domain' => $domain,

'path' => $path,

'expires' => $expires,

'secure' => $secure

);

return $cookie;

}

return false;

}

/**

* sort out cookies for the current request

*

* @param array $cookies array with all cookies

* @param boolean $secure is the send-content secure or not?

* @return string for Cookie-HTTP-Header

* @access private

*/

function getCookiesForRequest($cookies, $secure=false) {

Page 521: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

365

$cookie_str = '';

if ((! is_null($cookies)) && (is_array($cookies))) {

foreach ($cookies as $cookie) {

if (! is_array($cookie)) {

continue;

}

$this->debug("check cookie for validity: ".$cookie['name'].'='.

$cookie['value']);

if ((isset($cookie['expires'])) && (!

empty($cookie['expires']))) {

if (strtotime($cookie['expires']) <= time()) {

$this->debug('cookie has expired');

continue;

}

}

if ((isset($cookie['domain'])) && (!

empty($cookie['domain']))) {

$domain = preg_quote($cookie['domain']);

if (! preg_match("'.*$domain$'i", $this->host)) {

$this->debug('cookie has different

domain');

Page 522: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

366

continue;

}

}

if ((isset($cookie['path'])) && (!

empty($cookie['path']))) {

$path = preg_quote($cookie['path']);

if (! preg_match("'^$path.*'i", $this->path)) {

$this->debug('cookie is for a different

path');

continue;

}

}

if ((! $secure) && (isset($cookie['secure'])) &&

($cookie['secure'])) {

$this->debug('cookie is secure, transport is not');

continue;

}

$cookie_str .= $cookie['name'] . '=' . $cookie['value'] . ';

';

$this->debug('add cookie to Cookie-String: ' . $cookie['name'] .

'=' . $cookie['value']);

}

Page 523: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

367

}

return $cookie_str;

}

}

?><?php

/**

*

* nusoap_server allows the user to create a SOAP server

* that is capable of receiving messages and returning responses

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_server extends nusoap_base {

Page 524: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

368

/**

* HTTP headers of request

* @var array

* @access private

*/

var $headers = array();

/**

* HTTP request

* @var string

* @access private

*/

var $request = '';

/**

* SOAP headers from request (incomplete namespace resolution; special

characters not escaped) (text)

* @var string

* @access public

*/

var $requestHeaders = '';

/**

Page 525: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

369

* SOAP Headers from request (parsed)

* @var mixed

* @access public

*/

var $requestHeader = NULL;

/**

* SOAP body request portion (incomplete namespace resolution; special

characters not escaped) (text)

* @var string

* @access public

*/

var $document = '';

/**

* SOAP payload for request (text)

* @var string

* @access public

*/

var $requestSOAP = '';

/**

* requested method namespace URI

Page 526: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

370

* @var string

* @access private

*/

var $methodURI = '';

/**

* name of method requested

* @var string

* @access private

*/

var $methodname = '';

/**

* method parameters from request

* @var array

* @access private

*/

var $methodparams = array();

/**

* SOAP Action from request

* @var string

* @access private

Page 527: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

371

*/

var $SOAPAction = '';

/**

* character set encoding of incoming (request) messages

* @var string

* @access public

*/

var $xml_encoding = '';

/**

* toggles whether the parser decodes element content w/ utf8_decode()

* @var boolean

* @access public

*/

var $decode_utf8 = true;

/**

* HTTP headers of response

* @var array

* @access public

*/

Page 528: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

372

var $outgoing_headers = array();

/**

* HTTP response

* @var string

* @access private

*/

var $response = '';

/**

* SOAP headers for response (text or array of soapval or associative array)

* @var mixed

* @access public

*/

var $responseHeaders = '';

/**

* SOAP payload for response (text)

* @var string

* @access private

*/

var $responseSOAP = '';

/**

Page 529: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

373

* method return value to place in response

* @var mixed

* @access private

*/

var $methodreturn = false;

/**

* whether $methodreturn is a string of literal XML

* @var boolean

* @access public

*/

var $methodreturnisliteralxml = false;

/**

* SOAP fault for response (or false)

* @var mixed

* @access private

*/

var $fault = false;

/**

* text indication of result (for debugging)

* @var string

Page 530: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

374

* @access private

*/

var $result = 'successful';

/**

* assoc array of operations => opData; operations are added by the register()

* method or by parsing an external WSDL definition

* @var array

* @access private

*/

var $operations = array();

/**

* wsdl instance (if one)

* @var mixed

* @access private

*/

var $wsdl = false;

/**

* URL for WSDL (if one)

* @var mixed

Page 531: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

375

* @access private

*/

var $externalWSDLURL = false;

/**

* whether to append debug to response as XML comment

* @var boolean

* @access public

*/

var $debug_flag = false;

/**

* constructor

* the optional parameter is a path to a WSDL file that you'd like to bind the server

instance to.

*

* @param mixed $wsdl file path or URL (string), or wsdl instance (object)

* @access public

*/

function nusoap_server($wsdl=false){

Page 532: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

376

parent::nusoap_base();

// turn on debugging?

global $debug;

global $HTTP_SERVER_VARS;

if (isset($_SERVER)) {

$this->debug("_SERVER is defined:");

$this->appendDebug($this->varDump($_SERVER));

} elseif (isset($HTTP_SERVER_VARS)) {

$this->debug("HTTP_SERVER_VARS is defined:");

$this->appendDebug($this-

>varDump($HTTP_SERVER_VARS));

} else {

$this->debug("Neither _SERVER nor HTTP_SERVER_VARS

is defined.");

}

if (isset($debug)) {

$this->debug("In nusoap_server, set debug_flag=$debug based

on global flag");

$this->debug_flag = $debug;

Page 533: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

377

} elseif (isset($_SERVER['QUERY_STRING'])) {

$qs = explode('&', $_SERVER['QUERY_STRING']);

foreach ($qs as $v) {

if (substr($v, 0, 6) == 'debug=') {

$this->debug("In nusoap_server, set

debug_flag=" . substr($v, 6) . " based on query string #1");

$this->debug_flag = substr($v, 6);

}

}

} elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {

$qs = explode('&',

$HTTP_SERVER_VARS['QUERY_STRING']);

foreach ($qs as $v) {

if (substr($v, 0, 6) == 'debug=') {

$this->debug("In nusoap_server, set

debug_flag=" . substr($v, 6) . " based on query string #2");

$this->debug_flag = substr($v, 6);

}

}

}

Page 534: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

378

// wsdl

if($wsdl){

$this->debug("In nusoap_server, WSDL is specified");

if (is_object($wsdl) && (get_class($wsdl) == 'wsdl')) {

$this->wsdl = $wsdl;

$this->externalWSDLURL = $this->wsdl->wsdl;

$this->debug('Use existing wsdl instance from ' . $this-

>externalWSDLURL);

} else {

$this->debug('Create wsdl from ' . $wsdl);

$this->wsdl = new wsdl($wsdl);

$this->externalWSDLURL = $wsdl;

}

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

if($err = $this->wsdl->getError()){

die('WSDL ERROR: '.$err);

}

}

}

Page 535: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

379

/**

* processes request and returns response

*

* @param string $data usually is the value of $HTTP_RAW_POST_DATA

* @access public

*/

function service($data){

global $HTTP_SERVER_VARS;

if (isset($_SERVER['REQUEST_METHOD'])) {

$rm = $_SERVER['REQUEST_METHOD'];

} elseif (isset($HTTP_SERVER_VARS['REQUEST_METHOD'])) {

$rm = $HTTP_SERVER_VARS['REQUEST_METHOD'];

} else {

$rm = '';

}

if (isset($_SERVER['QUERY_STRING'])) {

$qs = $_SERVER['QUERY_STRING'];

Page 536: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

380

} elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {

$qs = $HTTP_SERVER_VARS['QUERY_STRING'];

} else {

$qs = '';

}

$this->debug("In service, request method=$rm query string=$qs

strlen(\$data)=" . strlen($data));

if ($rm == 'POST') {

$this->debug("In service, invoke the request");

$this->parse_request($data);

if (! $this->fault) {

$this->invoke_method();

}

if (! $this->fault) {

$this->serialize_return();

}

$this->send_response();

} elseif (preg_match('/wsdl/', $qs) ){

$this->debug("In service, this is a request for WSDL");

Page 537: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

381

if ($this->externalWSDLURL){

if (strpos($this->externalWSDLURL, "http://") !== false) { // assume URL

$this->debug("In service, re-direct for WSDL");

header('Location: '.$this->externalWSDLURL);

} else { // assume file

$this->debug("In service, use file passthru for WSDL");

header("Content-Type: text/xml\r\n");

$pos = strpos($this->externalWSDLURL, "file://");

if ($pos === false) {

$filename = $this->externalWSDLURL;

} else {

$filename = substr($this->externalWSDLURL,

$pos + 7);

}

$fp = fopen($this->externalWSDLURL, 'r');

fpassthru($fp);

}

} elseif ($this->wsdl) {

$this->debug("In service, serialize WSDL");

header("Content-Type: text/xml; charset=ISO-8859-

1\r\n");

Page 538: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

382

print $this->wsdl->serialize($this->debug_flag);

if ($this->debug_flag) {

$this->debug('wsdl:');

$this->appendDebug($this->varDump($this-

>wsdl));

print $this->getDebugAsXMLComment();

}

} else {

$this->debug("In service, there is no WSDL");

header("Content-Type: text/html; charset=ISO-8859-

1\r\n");

print "This service does not provide WSDL";

}

} elseif ($this->wsdl) {

$this->debug("In service, return Web description");

print $this->wsdl->webDescription();

} else {

$this->debug("In service, no Web description");

header("Content-Type: text/html; charset=ISO-8859-1\r\n");

print "This service does not provide a Web description";

}

Page 539: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

383

}

/**

* parses HTTP request headers.

*

* The following fields are set by this function (when successful)

*

* headers

* request

* xml_encoding

* SOAPAction

*

* @access private

*/

function parse_http_headers() {

global $HTTP_SERVER_VARS;

$this->request = '';

$this->SOAPAction = '';

if(function_exists('getallheaders')){

Page 540: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

384

$this->debug("In parse_http_headers, use getallheaders");

$headers = getallheaders();

foreach($headers as $k=>$v){

$k = strtolower($k);

$this->headers[$k] = $v;

$this->request .= "$k: $v\r\n";

$this->debug("$k: $v");

}

// get SOAPAction header

if(isset($this->headers['soapaction'])){

$this->SOAPAction = str_replace('"','',$this-

>headers['soapaction']);

}

// get the character encoding of the incoming request

if(isset($this->headers['content-type']) && strpos($this-

>headers['content-type'],'=')){

$enc = str_replace('"','',substr(strstr($this-

>headers["content-type"],'='),1));

if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',

$enc)){

$this->xml_encoding = strtoupper($enc);

Page 541: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

385

} else {

$this->xml_encoding = 'US-ASCII';

}

} else {

// should be US-ASCII for HTTP 1.0 or ISO-8859-1 for

HTTP 1.1

$this->xml_encoding = 'ISO-8859-1';

}

} elseif(isset($_SERVER) && is_array($_SERVER)){

$this->debug("In parse_http_headers, use _SERVER");

foreach ($_SERVER as $k => $v) {

if (substr($k, 0, 5) == 'HTTP_') {

$k = str_replace(' ', '-', strtolower(str_replace('_',

' ', substr($k, 5))));

} else {

$k = str_replace(' ', '-', strtolower(str_replace('_',

' ', $k)));

}

if ($k == 'soapaction') {

// get SOAPAction header

$k = 'SOAPAction';

Page 542: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

386

$v = str_replace('"', '', $v);

$v = str_replace('\\', '', $v);

$this->SOAPAction = $v;

} else if ($k == 'content-type') {

// get the character encoding of the incoming

request

if (strpos($v, '=')) {

$enc = substr(strstr($v, '='), 1);

$enc = str_replace('"', '', $enc);

$enc = str_replace('\\', '', $enc);

if (preg_match('/^(ISO-8859-1|US-

ASCII|UTF-8)$/i',$enc)) {

$this->xml_encoding =

strtoupper($enc);

} else {

$this->xml_encoding = 'US-

ASCII';

}

} else {

// should be US-ASCII for HTTP 1.0 or

ISO-8859-1 for HTTP 1.1

$this->xml_encoding = 'ISO-8859-1';

Page 543: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

387

}

}

$this->headers[$k] = $v;

$this->request .= "$k: $v\r\n";

$this->debug("$k: $v");

}

} elseif (is_array($HTTP_SERVER_VARS)) {

$this->debug("In parse_http_headers, use

HTTP_SERVER_VARS");

foreach ($HTTP_SERVER_VARS as $k => $v) {

if (substr($k, 0, 5) == 'HTTP_') {

$k = str_replace(' ', '-', strtolower(str_replace('_',

' ', substr($k, 5)))); $k = strtolower(substr($k, 5));

} else {

$k = str_replace(' ', '-', strtolower(str_replace('_',

' ', $k))); $k = strtolower($k);

}

if ($k == 'soapaction') {

// get SOAPAction header

$k = 'SOAPAction';

$v = str_replace('"', '', $v);

Page 544: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

388

$v = str_replace('\\', '', $v);

$this->SOAPAction = $v;

} else if ($k == 'content-type') {

// get the character encoding of the incoming

request

if (strpos($v, '=')) {

$enc = substr(strstr($v, '='), 1);

$enc = str_replace('"', '', $enc);

$enc = str_replace('\\', '', $enc);

if (preg_match('/^(ISO-8859-1|US-

ASCII|UTF-8)$/i',$enc)) {

$this->xml_encoding =

strtoupper($enc);

} else {

$this->xml_encoding = 'US-

ASCII';

}

} else {

// should be US-ASCII for HTTP 1.0 or

ISO-8859-1 for HTTP 1.1

$this->xml_encoding = 'ISO-8859-1';

}

Page 545: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

389

}

$this->headers[$k] = $v;

$this->request .= "$k: $v\r\n";

$this->debug("$k: $v");

}

} else {

$this->debug("In parse_http_headers, HTTP headers not

accessible");

$this->setError("HTTP headers not accessible");

}

}

/**

* parses a request

*

* The following fields are set by this function (when successful)

*

* headers

* request

* xml_encoding

Page 546: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

390

* SOAPAction

* request

* requestSOAP

* methodURI

* methodname

* methodparams

* requestHeaders

* document

*

* This sets the fault field on error

*

* @param string $data XML string

* @access private

*/

function parse_request($data='') {

$this->debug('entering parse_request()');

$this->parse_http_headers();

$this->debug('got character encoding: '.$this->xml_encoding);

// uncompress if necessary

Page 547: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

391

if (isset($this->headers['content-encoding']) && $this-

>headers['content-encoding'] != '') {

$this->debug('got content encoding: ' . $this->headers['content-

encoding']);

if ($this->headers['content-encoding'] == 'deflate' || $this-

>headers['content-encoding'] == 'gzip') {

// if decoding works, use it. else assume data wasn't gzencoded

if (function_exists('gzuncompress')) {

if ($this->headers['content-encoding'] ==

'deflate' && $degzdata = @gzuncompress($data)) {

$data = $degzdata;

} elseif ($this->headers['content-encoding'] ==

'gzip' && $degzdata = gzinflate(substr($data, 10))) {

$data = $degzdata;

} else {

$this->fault('SOAP-ENV:Client', 'Errors

occurred when trying to decode the data');

return;

}

} else {

$this->fault('SOAP-ENV:Client', 'This Server

does not support compressed data');

Page 548: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

392

return;

}

}

}

$this->request .= "\r\n".$data;

$data = $this->parseRequest($this->headers, $data);

$this->requestSOAP = $data;

$this->debug('leaving parse_request');

}

/**

* invokes a PHP function for the requested SOAP method

*

* The following fields are set by this function (when successful)

*

* methodreturn

*

* Note that the PHP function that is called may also set the following

* fields to affect the response sent to the client

*

Page 549: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

393

* responseHeaders

* outgoing_headers

*

* This sets the fault field on error

*

* @access private

*/

function invoke_method() {

$this->debug('in invoke_method, methodname=' . $this-

>methodname . ' methodURI=' . $this->methodURI . ' SOAPAction=' . $this-

>SOAPAction);

//

// if you are debugging in this area of the code, your service uses a

class to implement methods,

// you use SOAP RPC, and the client is .NET, please be aware of the

following...

// when the .NET wsdl.exe utility generates a proxy, it will remove the

'.' or '..' from the

// method name. that is fine for naming the .NET methods. it is not

fine for properly constructing

Page 550: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

394

// the XML request and reading the XML response. you need to add

the RequestElementName and

// ResponseElementName to the

System.Web.Services.Protocols.SoapRpcMethodAttribute that wsdl.exe

// generates for the method. these parameters are used to specify the

correct XML element names

// for .NET to use, i.e. the names with the '.' in them.

//

$orig_methodname = $this->methodname;

if ($this->wsdl) {

if ($this->opData = $this->wsdl->getOperationData($this-

>methodname)) {

$this->debug('in invoke_method, found WSDL

operation=' . $this->methodname);

$this->appendDebug('opData=' . $this->varDump($this-

>opData));

} elseif ($this->opData = $this->wsdl-

>getOperationDataForSoapAction($this->SOAPAction)) {

// Note: hopefully this case will only be used for doc/lit,

since rpc services should have wrapper element

$this->debug('in invoke_method, found WSDL

soapAction=' . $this->SOAPAction . ' for operation=' . $this->opData['name']);

Page 551: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

395

$this->appendDebug('opData=' . $this->varDump($this-

>opData));

$this->methodname = $this->opData['name'];

} else {

$this->debug('in invoke_method, no WSDL for

operation=' . $this->methodname);

$this->fault('SOAP-ENV:Client', "Operation '" . $this-

>methodname . "' is not defined in the WSDL for this service");

return;

}

} else {

$this->debug('in invoke_method, no WSDL to validate

method');

}

// if a . is present in $this->methodname, we see if there is a class in

scope,

// which could be referred to. We will also distinguish between two

deliminators,

// to allow methods to be called a the class or an instance

if (strpos($this->methodname, '..') > 0) {

$delim = '..';

Page 552: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

396

} else if (strpos($this->methodname, '.') > 0) {

$delim = '.';

} else {

$delim = '';

}

$this->debug("in invoke_method, delim=$delim");

$class = '';

$method = '';

if (strlen($delim) > 0 && substr_count($this->methodname, $delim)

== 1) {

$try_class = substr($this->methodname, 0, strpos($this-

>methodname, $delim));

if (class_exists($try_class)) {

// get the class and method name

$class = $try_class;

$method = substr($this->methodname, strpos($this-

>methodname, $delim) + strlen($delim));

$this->debug("in invoke_method, class=$class

method=$method delim=$delim");

} else {

Page 553: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

397

$this->debug("in invoke_method, class=$try_class not

found");

}

} else {

$try_class = '';

$this->debug("in invoke_method, no class to try");

}

// does method exist?

if ($class == '') {

if (!function_exists($this->methodname)) {

$this->debug("in invoke_method, function '$this-

>methodname' not found!");

$this->result = 'fault: method not found';

$this->fault('SOAP-ENV:Client',"method '$this-

>methodname'('$orig_methodname') not defined in service('$try_class' '$delim')");

return;

}

} else {

$method_to_compare = (substr(phpversion(), 0, 2) == '4.') ?

strtolower($method) : $method;

if (!in_array($method_to_compare,

get_class_methods($class))) {

Page 554: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

398

$this->debug("in invoke_method, method '$this-

>methodname' not found in class '$class'!");

$this->result = 'fault: method not found';

$this->fault('SOAP-ENV:Client',"method '$this-

>methodname'/'$method_to_compare'('$orig_methodname') not defined in

service/'$class'('$try_class' '$delim')");

return;

}

}

// evaluate message, getting back parameters

// verify that request parameters match the method's signature

if(! $this->verify_method($this->methodname,$this->methodparams))

{

// debug

$this->debug('ERROR: request not verified against method

signature');

$this->result = 'fault: request failed validation against method

signature';

// return fault

$this->fault('SOAP-ENV:Client',"Operation '$this-

>methodname' not defined in service.");

Page 555: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

399

return;

}

// if there are parameters to pass

$this->debug('in invoke_method, params:');

$this->appendDebug($this->varDump($this->methodparams));

$this->debug("in invoke_method, calling '$this->methodname'");

if (!function_exists('call_user_func_array')) {

if ($class == '') {

$this->debug('in invoke_method, calling function using

eval()');

$funcCall = "\$this->methodreturn = $this-

>methodname(";

} else {

if ($delim == '..') {

$this->debug('in invoke_method, calling class

method using eval()');

$funcCall = "\$this->methodreturn = ".

$class."::".$method."(";

} else {

$this->debug('in invoke_method, calling

instance method using eval()');

Page 556: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

400

// generate unique instance name

$instname = "\$inst_".time();

$funcCall = $instname." = new ".$class."(); ";

$funcCall .= "\$this->methodreturn = ".

$instname."->".$method."(";

}

}

if ($this->methodparams) {

foreach ($this->methodparams as $param) {

if (is_array($param) || is_object($param)) {

$this->fault('SOAP-ENV:Client',

'NuSOAP does not handle complexType parameters correctly when using eval;

call_user_func_array must be available');

return;

}

$funcCall .= "\"$param\",";

}

$funcCall = substr($funcCall, 0, -1);

}

$funcCall .= ');';

$this->debug('in invoke_method, function call: '.$funcCall);

Page 557: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

401

@eval($funcCall);

} else {

if ($class == '') {

$this->debug('in invoke_method, calling function using

call_user_func_array()');

$call_arg = "$this->methodname"; // straight

assignment changes $this->methodname to lower case after call_user_func_array()

} elseif ($delim == '..') {

$this->debug('in invoke_method, calling class method

using call_user_func_array()');

$call_arg = array ($class, $method);

} else {

$this->debug('in invoke_method, calling instance

method using call_user_func_array()');

$instance = new $class ();

$call_arg = array(&$instance, $method);

}

if (is_array($this->methodparams)) {

$this->methodreturn = call_user_func_array($call_arg,

array_values($this->methodparams));

} else {

Page 558: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

402

$this->methodreturn = call_user_func_array($call_arg,

array());

}

}

$this->debug('in invoke_method, methodreturn:');

$this->appendDebug($this->varDump($this->methodreturn));

$this->debug("in invoke_method, called method $this->methodname,

received data of type ".gettype($this->methodreturn));

}

/**

* serializes the return value from a PHP function into a full SOAP Envelope

*

* The following fields are set by this function (when successful)

*

* responseSOAP

*

* This sets the fault field on error

*

* @access private

*/

function serialize_return() {

Page 559: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

403

$this->debug('Entering serialize_return methodname: ' . $this-

>methodname . ' methodURI: ' . $this->methodURI);

// if fault

if (isset($this->methodreturn) && is_object($this->methodreturn) &&

((get_class($this->methodreturn) == 'soap_fault') || (get_class($this->methodreturn)

== 'nusoap_fault'))) {

$this->debug('got a fault object from method');

$this->fault = $this->methodreturn;

return;

} elseif ($this->methodreturnisliteralxml) {

$return_val = $this->methodreturn;

// returned value(s)

} else {

$this->debug('got a(n) '.gettype($this->methodreturn).' from

method');

$this->debug('serializing return value');

if($this->wsdl){

if (sizeof($this->opData['output']['parts']) > 1) {

$this->debug('more than one output part, so use

the method return unchanged');

$opParams = $this->methodreturn;

} elseif (sizeof($this->opData['output']['parts']) == 1) {

Page 560: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

404

$this->debug('exactly one output part, so wrap

the method return in a simple array');

// TODO: verify that it is not already wrapped!

//foreach ($this->opData['output']['parts'] as $name =>

$type) {

// $this->debug('wrap in element named ' .

$name);

//}

$opParams = array($this->methodreturn);

}

$return_val = $this->wsdl->serializeRPCParameters($this-

>methodname,'output',$opParams);

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

if($errstr = $this->wsdl->getError()){

$this->debug('got wsdl error: '.$errstr);

$this->fault('SOAP-ENV:Server', 'unable to

serialize result');

return;

}

} else {

if (isset($this->methodreturn)) {

Page 561: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

405

$return_val = $this->serialize_val($this-

>methodreturn, 'return');

} else {

$return_val = '';

$this->debug('in absence of WSDL, assume void

return for backward compatibility');

}

}

}

$this->debug('return value:');

$this->appendDebug($this->varDump($return_val));

$this->debug('serializing response');

if ($this->wsdl) {

$this->debug('have WSDL for serialization: style is ' . $this-

>opData['style']);

if ($this->opData['style'] == 'rpc') {

$this->debug('style is rpc for serialization: use is ' .

$this->opData['output']['use']);

if ($this->opData['output']['use'] == 'literal') {

Page 562: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

406

// http://www.ws-i.org/Profiles/BasicProfile-1.1-

2004-08-24.html R2735 says rpc/literal accessor elements should not be in a

namespace

if ($this->methodURI) {

$payload = '<ns1:'.$this-

>methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.

$this->methodname."Response>";

} else {

$payload = '<'.$this-

>methodname.'Response>'.$return_val.'</'.$this->methodname.'Response>';

}

} else {

if ($this->methodURI) {

$payload = '<ns1:'.$this-

>methodname.'Response xmlns:ns1="'.$this->methodURI.'">'.$return_val.'</ns1:'.

$this->methodname."Response>";

} else {

$payload = '<'.$this-

>methodname.'Response>'.$return_val.'</'.$this->methodname.'Response>';

}

}

} else {

Page 563: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

407

$this->debug('style is not rpc for serialization: assume

document');

$payload = $return_val;

}

} else {

$this->debug('do not have WSDL for serialization: assume

rpc/encoded');

$payload = '<ns1:'.$this->methodname.'Response xmlns:ns1="'.

$this->methodURI.'">'.$return_val.'</ns1:'.$this->methodname."Response>";

}

$this->result = 'successful';

if($this->wsdl){

//if($this->debug_flag){

$this->appendDebug($this->wsdl->getDebug());

// }

if (isset($this->opData['output']['encodingStyle'])) {

$encodingStyle = $this->opData['output']

['encodingStyle'];

} else {

$encodingStyle = '';

}

Page 564: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

408

// Added: In case we use a WSDL, return a serialized env.

WITH the usedNamespaces.

$this->responseSOAP = $this->serializeEnvelope($payload,

$this->responseHeaders,$this->wsdl->usedNamespaces,$this->opData['style'],$this-

>opData['output']['use'],$encodingStyle);

} else {

$this->responseSOAP = $this->serializeEnvelope($payload,

$this->responseHeaders);

}

$this->debug("Leaving serialize_return");

}

/**

* sends an HTTP response

*

* The following fields are set by this function (when successful)

*

* outgoing_headers

* response

*

* @access private

*/

Page 565: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

409

function send_response() {

$this->debug('Enter send_response');

if ($this->fault) {

$payload = $this->fault->serialize();

$this->outgoing_headers[] = "HTTP/1.0 500 Internal Server

Error";

$this->outgoing_headers[] = "Status: 500 Internal Server

Error";

} else {

$payload = $this->responseSOAP;

// Some combinations of PHP+Web server allow the Status

// to come through as a header. Since OK is the default

// just do nothing.

// $this->outgoing_headers[] = "HTTP/1.0 200 OK";

// $this->outgoing_headers[] = "Status: 200 OK";

}

// add debug data if in debug mode

if(isset($this->debug_flag) && $this->debug_flag){

$payload .= $this->getDebugAsXMLComment();

}

Page 566: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

410

$this->outgoing_headers[] = "Server: $this->title Server v$this-

>version";

preg_match('/\$Revisio' . 'n: ([^ ]+)/', $this->revision, $rev);

$this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this-

>version (".$rev[1].")";

// Let the Web server decide about this

//$this->outgoing_headers[] = "Connection: Close\r\n";

$payload = $this->getHTTPBody($payload);

$type = $this->getHTTPContentType();

$charset = $this->getHTTPContentTypeCharset();

$this->outgoing_headers[] = "Content-Type: $type" . ($charset ? ';

charset=' . $charset : '');

//begin code to compress payload - by John

// NOTE: there is no way to know whether the Web server will also

compress

// this data.

if (strlen($payload) > 1024 && isset($this->headers) && isset($this-

>headers['accept-encoding'])) {

if (strstr($this->headers['accept-encoding'], 'gzip')) {

if (function_exists('gzencode')) {

if (isset($this->debug_flag) && $this-

>debug_flag) {

Page 567: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

411

$payload .= "<!-- Content being gzipped

-->";

}

$this->outgoing_headers[] = "Content-Encoding:

gzip";

$payload = gzencode($payload);

} else {

if (isset($this->debug_flag) && $this-

>debug_flag) {

$payload .= "<!-- Content will not be

gzipped: no gzencode -->";

}

}

} elseif (strstr($this->headers['accept-encoding'], 'deflate')) {

// Note: MSIE requires gzdeflate output (no Zlib header

and checksum),

// instead of gzcompress output,

// which conflicts with HTTP 1.1 spec

(http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5)

if (function_exists('gzdeflate')) {

if (isset($this->debug_flag) && $this-

>debug_flag) {

Page 568: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

412

$payload .= "<!-- Content being deflated

-->";

}

$this->outgoing_headers[] = "Content-Encoding:

deflate";

$payload = gzdeflate($payload);

} else {

if (isset($this->debug_flag) && $this-

>debug_flag) {

$payload .= "<!-- Content will not be

deflated: no gzcompress -->";

}

}

}

}

//end code

$this->outgoing_headers[] = "Content-Length: ".strlen($payload);

reset($this->outgoing_headers);

foreach($this->outgoing_headers as $hdr){

header($hdr, false);

}

Page 569: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

413

print $payload;

$this->response = join("\r\n",$this->outgoing_headers)."\r\n\r\n".

$payload;

}

/**

* takes the value that was created by parsing the request

* and compares to the method's signature, if available.

*

* @param string $operation The operation to be invoked

* @param array $request The array of parameter values

* @return boolean Whether the operation was found

* @access private

*/

function verify_method($operation,$request){

if(isset($this->wsdl) && is_object($this->wsdl)){

if($this->wsdl->getOperationData($operation)){

return true;

}

} elseif(isset($this->operations[$operation])){

return true;

Page 570: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

414

}

return false;

}

/**

* processes SOAP message received from client

*

* @param array $headers The HTTP headers

* @param string $data unprocessed request data from client

* @return mixed value of the message, decoded into a PHP type

* @access private

*/

function parseRequest($headers, $data) {

$this->debug('Entering parseRequest() for data of length ' .

strlen($data) . ' headers:');

$this->appendDebug($this->varDump($headers));

if (!isset($headers['content-type'])) {

$this->setError('Request not of type text/xml (no content-type

header)');

return false;

}

if (!strstr($headers['content-type'], 'text/xml')) {

Page 571: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

415

$this->setError('Request not of type text/xml');

return false;

}

if (strpos($headers['content-type'], '=')) {

$enc = str_replace('"', '', substr(strstr($headers["content-type"],

'='), 1));

$this->debug('Got response encoding: ' . $enc);

if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',$enc)){

$this->xml_encoding = strtoupper($enc);

} else {

$this->xml_encoding = 'US-ASCII';

}

} else {

// should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP

1.1

$this->xml_encoding = 'ISO-8859-1';

}

$this->debug('Use encoding: ' . $this->xml_encoding . ' when creating

nusoap_parser');

// parse response, get soap parser obj

Page 572: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

416

$parser = new nusoap_parser($data,$this->xml_encoding,'',$this-

>decode_utf8);

// parser debug

$this->debug("parser debug: \n".$parser->getDebug());

// if fault occurred during message parsing

if($err = $parser->getError()){

$this->result = 'fault: error in msg parsing: '.$err;

$this->fault('SOAP-ENV:Client',"error in msg parsing:\n".$err);

// else successfully parsed request into soapval object

} else {

// get/set methodname

$this->methodURI = $parser->root_struct_namespace;

$this->methodname = $parser->root_struct_name;

$this->debug('methodname: '.$this->methodname.' methodURI:

'.$this->methodURI);

$this->debug('calling parser->get_soapbody()');

$this->methodparams = $parser->get_soapbody();

// get SOAP headers

$this->requestHeaders = $parser->getHeaders();

// get SOAP Header

$this->requestHeader = $parser->get_soapheader();

Page 573: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

417

// add document for doclit support

$this->document = $parser->document;

}

}

/**

* gets the HTTP body for the current response.

*

* @param string $soapmsg The SOAP payload

* @return string The HTTP body, which includes the SOAP payload

* @access private

*/

function getHTTPBody($soapmsg) {

return $soapmsg;

}

/**

* gets the HTTP content type for the current response.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type for the current response.

Page 574: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

418

* @access private

*/

function getHTTPContentType() {

return 'text/xml';

}

/**

* gets the HTTP content type charset for the current response.

* returns false for non-text content types.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type charset for the current response.

* @access private

*/

function getHTTPContentTypeCharset() {

return $this->soap_defencoding;

}

/**

Page 575: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

419

* add a method to the dispatch map (this has been replaced by the register

method)

*

* @param string $methodname

* @param string $in array of input values

* @param string $out array of output values

* @access public

* @deprecated

*/

function add_to_map($methodname,$in,$out){

$this->operations[$methodname] = array('name' =>

$methodname,'in' => $in,'out' => $out);

}

/**

* register a service function with the server

*

* @param string $name the name of the PHP function, class.method or

class..method

* @param array $in assoc array of input values: key = param name, value =

param type

* @param array $out assoc array of output values: key = param name, value

= param type

Page 576: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

420

* @param mixed $namespace the element namespace for the method or

false

* @param mixed $soapaction the soapaction for the method or false

* @param mixed $style optional (rpc|document) or false Note: when

'document' is specified, parameter and return wrappers are created for you

automatically

* @param mixed $use optional (encoded|literal) or false

* @param string $documentation optional Description to include in

WSDL

* @param string $encodingStyle optional (usually

'http://schemas.xmlsoap.org/soap/encoding/' for encoded)

* @access public

*/

function register($name,$in=array(),$out=array(),$namespace=false,

$soapaction=false,$style=false,$use=false,$documentation='',$encodingStyle=''){

global $HTTP_SERVER_VARS;

if($this->externalWSDLURL){

die('You cannot bind to an external WSDL file, and register

methods outside of it! Please choose either WSDL or no WSDL.');

}

if (! $name) {

die('You must specify a name when you register an operation');

Page 577: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

421

}

if (!is_array($in)) {

die('You must provide an array for operation inputs');

}

if (!is_array($out)) {

die('You must provide an array for operation outputs');

}

if(false == $namespace) {

}

if(false == $soapaction) {

if (isset($_SERVER)) {

$SERVER_NAME = $_SERVER['SERVER_NAME'];

$SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ?

$_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

$HTTPS = isset($_SERVER['HTTPS']) ?

$_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ?

$HTTP_SERVER_VARS['HTTPS'] : 'off');

} elseif (isset($HTTP_SERVER_VARS)) {

$SERVER_NAME =

$HTTP_SERVER_VARS['SERVER_NAME'];

$SCRIPT_NAME =

isset($HTTP_SERVER_VARS['PHP_SELF']) ?

Page 578: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

422

$HTTP_SERVER_VARS['PHP_SELF'] :

$HTTP_SERVER_VARS['SCRIPT_NAME'];

$HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ?

$HTTP_SERVER_VARS['HTTPS'] : 'off';

} else {

$this->setError("Neither _SERVER nor

HTTP_SERVER_VARS is available");

}

if ($HTTPS == '1' || $HTTPS == 'on') {

$SCHEME = 'https';

} else {

$SCHEME = 'http';

}

$soapaction = "$SCHEME://

$SERVER_NAME$SCRIPT_NAME/$name";

}

if(false == $style) {

$style = "rpc";

}

if(false == $use) {

$use = "encoded";

Page 579: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

423

}

if ($use == 'encoded' && $encodingStyle == '') {

$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';

}

$this->operations[$name] = array(

'name' => $name,

'in' => $in,

'out' => $out,

'namespace' => $namespace,

'soapaction' => $soapaction,

'style' => $style);

if($this->wsdl){

$this->wsdl->addOperation($name,$in,$out,$namespace,$soapaction,$style,

$use,$documentation,$encodingStyle);

}

return true;

}

/**

Page 580: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

424

* Specify a fault to be returned to the client.

* This also acts as a flag to the server that a fault has occured.

*

* @param string $faultcode

* @param string $faultstring

* @param string $faultactor

* @param string $faultdetail

* @access public

*/

function fault($faultcode,$faultstring,$faultactor='',$faultdetail=''){

if ($faultdetail == '' && $this->debug_flag) {

$faultdetail = $this->getDebug();

}

$this->fault = new nusoap_fault($faultcode,$faultactor,$faultstring,

$faultdetail);

$this->fault->soap_defencoding = $this->soap_defencoding;

}

/**

* Sets up wsdl object.

Page 581: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

425

* Acts as a flag to enable internal WSDL generation

*

* @param string $serviceName, name of the service

* @param mixed $namespace optional 'tns' service namespace or false

* @param mixed $endpoint optional URL of service endpoint or false

* @param string $style optional (rpc|document) WSDL style (also specified by

operation)

* @param string $transport optional SOAP transport

* @param mixed $schemaTargetNamespace optional 'types' targetNamespace for

service schema or false

*/

function configureWSDL($serviceName,$namespace = false,$endpoint = false,

$style='rpc', $transport = 'http://schemas.xmlsoap.org/soap/http',

$schemaTargetNamespace = false)

{

global $HTTP_SERVER_VARS;

if (isset($_SERVER)) {

$SERVER_NAME = $_SERVER['SERVER_NAME'];

$SERVER_PORT = $_SERVER['SERVER_PORT'];

$SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ?

$_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

Page 582: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

426

$HTTPS = isset($_SERVER['HTTPS']) ?

$_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ?

$HTTP_SERVER_VARS['HTTPS'] : 'off');

} elseif (isset($HTTP_SERVER_VARS)) {

$SERVER_NAME =

$HTTP_SERVER_VARS['SERVER_NAME'];

$SERVER_PORT =

$HTTP_SERVER_VARS['SERVER_PORT'];

$SCRIPT_NAME =

isset($HTTP_SERVER_VARS['PHP_SELF']) ?

$HTTP_SERVER_VARS['PHP_SELF'] :

$HTTP_SERVER_VARS['SCRIPT_NAME'];

$HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ?

$HTTP_SERVER_VARS['HTTPS'] : 'off';

} else {

$this->setError("Neither _SERVER nor

HTTP_SERVER_VARS is available");

}

// If server name has port number attached then strip it (else port

number gets duplicated in WSDL output) (occurred using lighttpd and FastCGI)

$colon = strpos($SERVER_NAME,":");

if ($colon) {

$SERVER_NAME = substr($SERVER_NAME, 0, $colon);

Page 583: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

427

}

if ($SERVER_PORT == 80) {

$SERVER_PORT = '';

} else {

$SERVER_PORT = ':' . $SERVER_PORT;

}

if(false == $namespace) {

$namespace = "http://$SERVER_NAME/soap/$serviceName";

}

if(false == $endpoint) {

if ($HTTPS == '1' || $HTTPS == 'on') {

$SCHEME = 'https';

} else {

$SCHEME = 'http';

}

$endpoint = "$SCHEME://

$SERVER_NAME$SERVER_PORT$SCRIPT_NAME";

}

if(false == $schemaTargetNamespace) {

Page 584: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

428

$schemaTargetNamespace = $namespace;

}

$this->wsdl = new wsdl;

$this->wsdl->serviceName = $serviceName;

$this->wsdl->endpoint = $endpoint;

$this->wsdl->namespaces['tns'] = $namespace;

$this->wsdl->namespaces['soap'] =

'http://schemas.xmlsoap.org/wsdl/soap/';

$this->wsdl->namespaces['wsdl'] = 'http://schemas.xmlsoap.org/wsdl/';

if ($schemaTargetNamespace != $namespace) {

$this->wsdl->namespaces['types'] = $schemaTargetNamespace;

}

$this->wsdl->schemas[$schemaTargetNamespace][0] = new

nusoap_xmlschema('', '', $this->wsdl->namespaces);

if ($style == 'document') {

$this->wsdl->schemas[$schemaTargetNamespace][0]-

>schemaInfo['elementFormDefault'] = 'qualified';

}

$this->wsdl->schemas[$schemaTargetNamespace][0]-

>schemaTargetNamespace = $schemaTargetNamespace;

Page 585: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

429

$this->wsdl->schemas[$schemaTargetNamespace][0]-

>imports['http://schemas.xmlsoap.org/soap/encoding/'][0] = array('location' => '',

'loaded' => true);

$this->wsdl->schemas[$schemaTargetNamespace][0]-

>imports['http://schemas.xmlsoap.org/wsdl/'][0] = array('location' => '', 'loaded' =>

true);

$this->wsdl->bindings[$serviceName.'Binding'] = array(

'name'=>$serviceName.'Binding',

'style'=>$style,

'transport'=>$transport,

'portType'=>$serviceName.'PortType');

$this->wsdl->ports[$serviceName.'Port'] = array(

'binding'=>$serviceName.'Binding',

'location'=>$endpoint,

'bindingType'=>'http://schemas.xmlsoap.org/wsdl/soap/');

}

}

/**

* Backward compatibility

*/

class soap_server extends nusoap_server {

Page 586: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

430

}

?>

<?php

/**

* parses a WSDL file, allows access to it's data, other utility methods.

* also builds WSDL structures programmatically.

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class wsdl extends nusoap_base {

// URL or filename of the root of this WSDL

var $wsdl;

// define internal arrays of bindings, ports, operations, messages, etc.

var $schemas = array();

var $currentSchema;

var $message = array();

var $complexTypes = array();

Page 587: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

431

var $messages = array();

var $currentMessage;

var $currentOperation;

var $portTypes = array();

var $currentPortType;

var $bindings = array();

var $currentBinding;

var $ports = array();

var $currentPort;

var $opData = array();

var $status = '';

var $documentation = false;

var $endpoint = '';

// array of wsdl docs to import

var $import = array();

// parser vars

var $parser;

var $position = 0;

var $depth = 0;

var $depth_array = array();

Page 588: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

432

// for getting wsdl

var $proxyhost = '';

var $proxyport = '';

var $proxyusername = '';

var $proxypassword = '';

var $timeout = 0;

var $response_timeout = 30;

var $curl_options = array(); // User-specified cURL options

var $use_curl = false; // whether to always try to use cURL

// for HTTP authentication

var $username = ''; // Username for HTTP

authentication

var $password = ''; // Password for HTTP

authentication

var $authtype = ''; // Type of HTTP authentication

var $certRequest = array(); // Certificate for HTTP SSL

authentication

/**

* constructor

*

* @param string $wsdl WSDL document URL

Page 589: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

433

* @param string $proxyhost

* @param string $proxyport

* @param string $proxyusername

* @param string $proxypassword

* @param integer $timeout set the connection timeout

* @param integer $response_timeout set the response timeout

* @param array $curl_options user-specified cURL options

* @param boolean $use_curl try to use cURL

* @access public

*/

function wsdl($wsdl = '',$proxyhost=false,$proxyport=false,

$proxyusername=false,$proxypassword=false,

$timeout=0,$response_timeout=30,$curl_options=null,$use_curl=false){

parent::nusoap_base();

$this->debug("ctor wsdl=$wsdl timeout=$timeout

response_timeout=$response_timeout");

$this->proxyhost = $proxyhost;

$this->proxyport = $proxyport;

$this->proxyusername = $proxyusername;

$this->proxypassword = $proxypassword;

$this->timeout = $timeout;

Page 590: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

434

$this->response_timeout = $response_timeout;

if (is_array($curl_options))

$this->curl_options = $curl_options;

$this->use_curl = $use_curl;

$this->fetchWSDL($wsdl);

}

/**

* fetches the WSDL document and parses it

*

* @access public

*/

function fetchWSDL($wsdl) {

$this->debug("parse and process WSDL path=$wsdl");

$this->wsdl = $wsdl;

// parse wsdl file

if ($this->wsdl != "") {

$this->parseWSDL($this->wsdl);

}

// imports

Page 591: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

435

// TODO: handle imports more properly, grabbing them in-line and nesting them

$imported_urls = array();

$imported = 1;

while ($imported > 0) {

$imported = 0;

// Schema imports

foreach ($this->schemas as $ns => $list) {

foreach ($list as $xs) {

$wsdlparts = parse_url($this->wsdl); //

this is bogusly simple!

foreach ($xs->imports as $ns2 => $list2) {

for ($ii = 0; $ii < count($list2); $ii++) {

if (! $list2[$ii]['loaded']) {

$this->schemas[$ns]->imports[$ns2][$ii]

['loaded'] = true;

$url = $list2[$ii]['location'];

if ($url != '') {

$urlparts =

parse_url($url);

if (!

isset($urlparts['host'])) {

Page 592: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

436

$url =

$wsdlparts['scheme'] . '://' . $wsdlparts['host'] . (isset($wsdlparts['port']) ? ':' .

$wsdlparts['port'] : '') .

substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];

}

if (! in_array($url,

$imported_urls)) {

$this->parseWSDL($url);

$imported++;

$imported_urls[] = $url;

}

} else {

$this-

>debug("Unexpected scenario: empty URL for unloaded import");

}

}

}

}

}

}

// WSDL imports

Page 593: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

437

$wsdlparts = parse_url($this->wsdl); // this is bogusly

simple!

foreach ($this->import as $ns => $list) {

for ($ii = 0; $ii < count($list); $ii++) {

if (! $list[$ii]['loaded']) {

$this->import[$ns][$ii]['loaded'] = true;

$url = $list[$ii]['location'];

if ($url != '') {

$urlparts = parse_url($url);

if (!isset($urlparts['host'])) {

$url =

$wsdlparts['scheme'] . '://' . $wsdlparts['host'] . (isset($wsdlparts['port']) ? ':' .

$wsdlparts['port'] : '') .

substr($wsdlparts['path'],0,strrpos($wsdlparts['path'],'/') + 1) .$urlparts['path'];

}

if (! in_array($url,

$imported_urls)) {

$this->parseWSDL($url);

$imported++;

$imported_urls[] = $url;

}

Page 594: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

438

} else {

$this->debug("Unexpected

scenario: empty URL for unloaded import");

}

}

}

}

}

// add new data to operation data

foreach($this->bindings as $binding => $bindingData) {

if (isset($bindingData['operations']) && is_array($bindingData['operations']))

{

foreach($bindingData['operations'] as $operation => $data) {

$this->debug('post-parse data gathering for ' . $operation);

$this->bindings[$binding]['operations'][$operation]['input'] =

isset($this->bindings[$binding]

['operations'][$operation]['input']) ?

array_merge($this->bindings[$binding]

['operations'][$operation]['input'], $this->portTypes[ $bindingData['portType'] ]

[$operation]['input']) :

$this-

>portTypes[ $bindingData['portType'] ][$operation]['input'];

Page 595: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

439

$this->bindings[$binding]['operations'][$operation]['output'] =

isset($this->bindings[$binding]

['operations'][$operation]['output']) ?

array_merge($this->bindings[$binding]

['operations'][$operation]['output'], $this->portTypes[ $bindingData['portType'] ]

[$operation]['output']) :

$this-

>portTypes[ $bindingData['portType'] ][$operation]['output'];

if(isset($this->messages[ $this->bindings[$binding]['operations']

[$operation]['input']['message'] ])){

$this->bindings[$binding]['operations']

[$operation]['input']['parts'] = $this->messages[ $this->bindings[$binding]

['operations'][$operation]['input']['message'] ];

}

if(isset($this->messages[ $this-

>bindings[$binding]['operations'][$operation]['output']['message'] ])){

$this->bindings[$binding]['operations'][$operation]['output']

['parts'] = $this->messages[ $this->bindings[$binding]['operations'][$operation]

['output']['message'] ];

}

// Set operation style if necessary, but do not override one already

provided

if (isset($bindingData['style']) && !isset($this-

>bindings[$binding]['operations'][$operation]['style'])) {

Page 596: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

440

$this->bindings[$binding]['operations'][$operation]['style'] =

$bindingData['style'];

}

$this->bindings[$binding]['operations'][$operation]['transport'] =

isset($bindingData['transport']) ? $bindingData['transport'] : '';

$this->bindings[$binding]['operations'][$operation]['documentation'] =

isset($this->portTypes[ $bindingData['portType'] ][$operation]['documentation']) ?

$this->portTypes[ $bindingData['portType'] ][$operation]['documentation'] : '';

$this->bindings[$binding]['operations'][$operation]['endpoint'] =

isset($bindingData['endpoint']) ? $bindingData['endpoint'] : '';

}

}

}

}

/**

* parses the wsdl document

*

* @param string $wsdl path or URL

* @access private

*/

function parseWSDL($wsdl = '') {

$this->debug("parse WSDL at path=$wsdl");

Page 597: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

441

if ($wsdl == '') {

$this->debug('no wsdl passed to parseWSDL()!!');

$this->setError('no wsdl passed to parseWSDL()!!');

return false;

}

// parse $wsdl for url format

$wsdl_props = parse_url($wsdl);

if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'http' ||

$wsdl_props['scheme'] == 'https')) {

$this->debug('getting WSDL http(s) URL ' . $wsdl);

// get wsdl

$tr = new soap_transport_http($wsdl, $this->curl_options, $this-

>use_curl);

$tr->request_method = 'GET';

$tr->useSOAPAction = false;

if($this->proxyhost && $this->proxyport){

$tr->setProxy($this->proxyhost,$this->proxyport,$this-

>proxyusername,$this->proxypassword);

}

if ($this->authtype != '') {

Page 598: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

442

$tr->setCredentials($this->username, $this->password,

$this->authtype, array(), $this->certRequest);

}

$tr->setEncoding('gzip, deflate');

$wsdl_string = $tr->send('', $this->timeout, $this-

>response_timeout);

//$this->debug("WSDL request\n" . $tr->outgoing_payload);

//$this->debug("WSDL response\n" . $tr->incoming_payload);

$this->appendDebug($tr->getDebug());

// catch errors

if($err = $tr->getError() ){

$errstr = 'Getting ' . $wsdl . ' - HTTP ERROR: '.$err;

$this->debug($errstr);

$this->setError($errstr);

unset($tr);

return false;

}

unset($tr);

$this->debug("got WSDL URL");

} else {

// $wsdl is not http(s), so treat it as a file URL or plain file path

Page 599: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

443

if (isset($wsdl_props['scheme']) && ($wsdl_props['scheme'] == 'file') &&

isset($wsdl_props['path'])) {

$path = isset($wsdl_props['host']) ? ($wsdl_props['host'] . ':' .

$wsdl_props['path']) : $wsdl_props['path'];

} else {

$path = $wsdl;

}

$this->debug('getting WSDL file ' . $path);

if ($fp = @fopen($path, 'r')) {

$wsdl_string = '';

while ($data = fread($fp, 32768)) {

$wsdl_string .= $data;

}

fclose($fp);

} else {

$errstr = "Bad path to WSDL file $path";

$this->debug($errstr);

$this->setError($errstr);

return false;

}

}

Page 600: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

444

$this->debug('Parse WSDL');

// end new code added

// Create an XML parser.

$this->parser = xml_parser_create();

// Set the options for parsing the XML data.

// xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);

// Set the object for the parser.

xml_set_object($this->parser, $this);

// Set the element handlers for the parser.

xml_set_element_handler($this->parser, 'start_element', 'end_element');

xml_set_character_data_handler($this->parser, 'character_data');

// Parse the XML file.

if (!xml_parse($this->parser, $wsdl_string, true)) {

// Display an error message.

$errstr = sprintf(

'XML error parsing WSDL from %s on line %d: %s',

$wsdl,

xml_get_current_line_number($this->parser),

xml_error_string(xml_get_error_code($this->parser))

Page 601: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

445

);

$this->debug($errstr);

$this->debug("XML payload:\n" . $wsdl_string);

$this->setError($errstr);

return false;

}

// free the parser

xml_parser_free($this->parser);

$this->debug('Parsing WSDL done');

// catch wsdl parse errors

if($this->getError()){

return false;

}

return true;

}

/**

* start-element handler

*

* @param string $parser XML parser object

* @param string $name element name

Page 602: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

446

* @param string $attrs associative array of attributes

* @access private

*/

function start_element($parser, $name, $attrs)

{

if ($this->status == 'schema') {

$this->currentSchema->schemaStartElement($parser, $name, $attrs);

$this->appendDebug($this->currentSchema->getDebug());

$this->currentSchema->clearDebug();

} elseif (preg_match('/schema$/', $name)) {

$this->debug('Parsing WSDL schema');

// $this->debug("startElement for $name ($attrs[name]). status = $this->status

(".$this->getLocalPart($name).")");

$this->status = 'schema';

$this->currentSchema = new nusoap_xmlschema('', '', $this->namespaces);

$this->currentSchema->schemaStartElement($parser, $name, $attrs);

$this->appendDebug($this->currentSchema->getDebug());

$this->currentSchema->clearDebug();

} else {

// position in the total number of elements, starting from 0

Page 603: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

447

$pos = $this->position++;

$depth = $this->depth++;

// set self as current value for this depth

$this->depth_array[$depth] = $pos;

$this->message[$pos] = array('cdata' => '');

// process attributes

if (count($attrs) > 0) {

// register namespace declarations

foreach($attrs as $k => $v) {

if (preg_match('/^xmlns/',$k)) {

if ($ns_prefix = substr(strrchr($k, ':'), 1)) {

$this->namespaces[$ns_prefix] = $v;

} else {

$this->namespaces['ns' . (count($this->namespaces) + 1)] = $v;

}

if ($v == 'http://www.w3.org/2001/XMLSchema' || $v ==

'http://www.w3.org/1999/XMLSchema' || $v ==

'http://www.w3.org/2000/10/XMLSchema') {

$this->XMLSchemaVersion = $v;

$this->namespaces['xsi'] = $v . '-instance';

}

Page 604: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

448

}

}

// expand each attribute prefix to its namespace

foreach($attrs as $k => $v) {

$k = strpos($k, ':') ? $this->expandQname($k) : $k;

if ($k != 'location' && $k != 'soapAction' && $k != 'namespace') {

$v = strpos($v, ':') ? $this->expandQname($v) : $v;

}

$eAttrs[$k] = $v;

}

$attrs = $eAttrs;

} else {

$attrs = array();

}

// get element prefix, namespace and name

if (preg_match('/:/', $name)) {

// get ns prefix

$prefix = substr($name, 0, strpos($name, ':'));

// get ns

Page 605: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

449

$namespace = isset($this->namespaces[$prefix]) ? $this-

>namespaces[$prefix] : '';

// get unqualified name

$name = substr(strstr($name, ':'), 1);

}

// process attributes, expanding any prefixes to namespaces

// find status, register data

switch ($this->status) {

case 'message':

if ($name == 'part') {

if (isset($attrs['type'])) {

$this->debug("msg " . $this->currentMessage . ": found

part (with type) $attrs[name]: " . implode(',', $attrs));

$this->messages[$this->currentMessage][$attrs['name']] =

$attrs['type'];

}

if (isset($attrs['element'])) {

$this->debug("msg " . $this->currentMessage . ": found

part (with element) $attrs[name]: " . implode(',', $attrs));

$this->messages[$this->currentMessage]

[$attrs['name']] = $attrs['element'] . '^';

}

Page 606: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

450

}

break;

case 'portType':

switch ($name) {

case 'operation':

$this->currentPortOperation = $attrs['name'];

$this->debug("portType $this->currentPortType

operation: $this->currentPortOperation");

if (isset($attrs['parameterOrder'])) {

$this->portTypes[$this->currentPortType]

[$attrs['name']]['parameterOrder'] = $attrs['parameterOrder'];

}

break;

case 'documentation':

$this->documentation = true;

break;

// merge input/output data

default:

$m = isset($attrs['message']) ? $this-

>getLocalPart($attrs['message']) : '';

Page 607: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

451

$this->portTypes[$this->currentPortType]

[$this->currentPortOperation][$name]['message'] = $m;

break;

}

break;

case 'binding':

switch ($name) {

case 'binding':

// get ns prefix

if (isset($attrs['style'])) {

$this->bindings[$this->currentBinding]['prefix']

= $prefix;

}

$this->bindings[$this->currentBinding] =

array_merge($this->bindings[$this->currentBinding], $attrs);

break;

case 'header':

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation][$this->opStatus]['headers'][]

= $attrs;

break;

case 'operation':

Page 608: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

452

if (isset($attrs['soapAction'])) {

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation]['soapAction'] =

$attrs['soapAction'];

}

if (isset($attrs['style'])) {

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation]['style'] = $attrs['style'];

}

if (isset($attrs['name'])) {

$this->currentOperation =

$attrs['name'];

$this->debug("current binding

operation: $this->currentOperation");

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation]['name'] = $attrs['name'];

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation]['binding'] = $this-

>currentBinding;

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation]['endpoint'] = isset($this-

>bindings[$this->currentBinding]['endpoint']) ? $this->bindings[$this-

>currentBinding]['endpoint'] : '';

}

Page 609: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

453

break;

case 'input':

$this->opStatus = 'input';

break;

case 'output':

$this->opStatus = 'output';

break;

case 'body':

if (isset($this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation][$this->opStatus])) {

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation][$this->opStatus] =

array_merge($this->bindings[$this->currentBinding]['operations'][$this-

>currentOperation][$this->opStatus], $attrs);

} else {

$this->bindings[$this-

>currentBinding]['operations'][$this->currentOperation][$this->opStatus] = $attrs;

}

break;

}

break;

case 'service':

Page 610: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

454

switch ($name) {

case 'port':

$this->currentPort = $attrs['name'];

$this->debug('current port: ' . $this-

>currentPort);

$this->ports[$this->currentPort]['binding']

= $this->getLocalPart($attrs['binding']);

break;

case 'address':

$this->ports[$this->currentPort]['location']

= $attrs['location'];

$this->ports[$this->currentPort]

['bindingType'] = $namespace;

$this->bindings[ $this->ports[$this-

>currentPort]['binding'] ]['bindingType'] = $namespace;

$this->bindings[ $this->ports[$this-

>currentPort]['binding'] ]['endpoint'] = $attrs['location'];

break;

}

break;

}

Page 611: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

455

// set status

switch ($name) {

case 'import':

if (isset($attrs['location'])) {

$this->import[$attrs['namespace']][] = array('location' =>

$attrs['location'], 'loaded' => false);

$this->debug('parsing import ' . $attrs['namespace']. ' - ' . $attrs['location']

. ' (' . count($this->import[$attrs['namespace']]).')');

} else {

$this->import[$attrs['namespace']][] = array('location' => '', 'loaded' =>

true);

if (! $this-

>getPrefixFromNamespace($attrs['namespace'])) {

$this->namespaces['ns'.(count($this-

>namespaces)+1)] = $attrs['namespace'];

}

$this->debug('parsing import ' . $attrs['namespace']. ' - [no location] (' .

count($this->import[$attrs['namespace']]).')');

}

break;

//wait for schema

//case 'types':

Page 612: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

456

// $this->status = 'schema';

// break;

case 'message':

$this->status = 'message';

$this->messages[$attrs['name']] = array();

$this->currentMessage = $attrs['name'];

break;

case 'portType':

$this->status = 'portType';

$this->portTypes[$attrs['name']] = array();

$this->currentPortType = $attrs['name'];

break;

case "binding":

if (isset($attrs['name'])) {

// get binding name

if (strpos($attrs['name'], ':')) {

$this->currentBinding = $this-

>getLocalPart($attrs['name']);

} else {

$this->currentBinding = $attrs['name'];

Page 613: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

457

}

$this->status = 'binding';

$this->bindings[$this->currentBinding]

['portType'] = $this->getLocalPart($attrs['type']);

$this->debug("current binding: $this-

>currentBinding of portType: " . $attrs['type']);

}

break;

case 'service':

$this->serviceName = $attrs['name'];

$this->status = 'service';

$this->debug('current service: ' . $this->serviceName);

break;

case 'definitions':

foreach ($attrs as $name => $value) {

$this->wsdl_info[$name] = $value;

}

break;

}

}

}

Page 614: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

458

/**

* end-element handler

*

* @param string $parser XML parser object

* @param string $name element name

* @access private

*/

function end_element($parser, $name){

// unset schema status

if (/*preg_match('/types$/', $name) ||*/ preg_match('/schema$/',

$name)) {

$this->status = "";

$this->appendDebug($this->currentSchema->getDebug());

$this->currentSchema->clearDebug();

$this->schemas[$this->currentSchema-

>schemaTargetNamespace][] = $this->currentSchema;

$this->debug('Parsing WSDL schema done');

}

if ($this->status == 'schema') {

$this->currentSchema->schemaEndElement($parser, $name);

} else {

Page 615: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

459

// bring depth down a notch

$this->depth--;

}

// end documentation

if ($this->documentation) {

//TODO: track the node to which documentation should be

assigned; it can be a part, message, etc.

//$this->portTypes[$this->currentPortType][$this-

>currentPortOperation]['documentation'] = $this->documentation;

$this->documentation = false;

}

}

/**

* element content handler

*

* @param string $parser XML parser object

* @param string $data element content

* @access private

*/

function character_data($parser, $data)

{

Page 616: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

460

$pos = isset($this->depth_array[$this->depth]) ? $this-

>depth_array[$this->depth] : 0;

if (isset($this->message[$pos]['cdata'])) {

$this->message[$pos]['cdata'] .= $data;

}

if ($this->documentation) {

$this->documentation .= $data;

}

}

/**

* if authenticating, set user credentials here

*

* @param string $username

* @param string $password

* @param string $authtype (basic|digest|certificate|ntlm)

* @param array $certRequest (keys must be cainfofile (optional),

sslcertfile, sslkeyfile, passphrase, certpassword (optional), verifypeer (optional),

verifyhost (optional): see corresponding options in cURL docs)

* @access public

*/

Page 617: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

461

function setCredentials($username, $password, $authtype = 'basic',

$certRequest = array()) {

$this->debug("setCredentials username=$username

authtype=$authtype certRequest=");

$this->appendDebug($this->varDump($certRequest));

$this->username = $username;

$this->password = $password;

$this->authtype = $authtype;

$this->certRequest = $certRequest;

}

function getBindingData($binding)

{

if (is_array($this->bindings[$binding])) {

return $this->bindings[$binding];

}

}

/**

* returns an assoc array of operation names => operation data

*

* @param string $portName WSDL port name

Page 618: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

462

* @param string $bindingType eg: soap, smtp, dime (only soap and soap12

are currently supported)

* @return array

* @access public

*/

function getOperations($portName = '', $bindingType = 'soap') {

$ops = array();

if ($bindingType == 'soap') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';

} elseif ($bindingType == 'soap12') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap12/';

} else {

$this->debug("getOperations bindingType $bindingType may

not be supported");

}

$this->debug("getOperations for port '$portName' bindingType

$bindingType");

// loop thru ports

foreach($this->ports as $port => $portData) {

$this->debug("getOperations checking port $port bindingType

" . $portData['bindingType']);

Page 619: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

463

if ($portName == '' || $port == $portName) {

// binding type of port matches parameter

if ($portData['bindingType'] == $bindingType) {

$this->debug("getOperations found port $port

bindingType $bindingType");

//$this->debug("port data: " . $this-

>varDump($portData));

//$this->debug("bindings: " . $this-

>varDump($this->bindings[ $portData['binding'] ]));

// merge bindings

if (isset($this->bindings[ $portData['binding'] ]

['operations'])) {

$ops = array_merge ($ops, $this-

>bindings[ $portData['binding'] ]['operations']);

}

}

}

}

if (count($ops) == 0) {

$this->debug("getOperations found no operations for port

'$portName' bindingType $bindingType");

}

Page 620: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

464

return $ops;

}

/**

* returns an associative array of data necessary for calling an operation

*

* @param string $operation name of operation

* @param string $bindingType type of binding eg: soap, soap12

* @return array

* @access public

*/

function getOperationData($operation, $bindingType = 'soap')

{

if ($bindingType == 'soap') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';

} elseif ($bindingType == 'soap12') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap12/';

}

// loop thru ports

foreach($this->ports as $port => $portData) {

// binding type of port matches parameter

Page 621: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

465

if ($portData['bindingType'] == $bindingType) {

// get binding

//foreach($this->bindings[ $portData['binding'] ]

['operations'] as $bOperation => $opData) {

foreach(array_keys($this-

>bindings[ $portData['binding'] ]['operations']) as $bOperation) {

// note that we could/should also check the

namespace here

if ($operation == $bOperation) {

$opData = $this-

>bindings[ $portData['binding'] ]['operations'][$operation];

return $opData;

}

}

}

}

}

/**

* returns an associative array of data necessary for calling an operation

*

* @param string $soapAction soapAction for operation

Page 622: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

466

* @param string $bindingType type of binding eg: soap, soap12

* @return array

* @access public

*/

function getOperationDataForSoapAction($soapAction, $bindingType =

'soap') {

if ($bindingType == 'soap') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';

} elseif ($bindingType == 'soap12') {

$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap12/';

}

// loop thru ports

foreach($this->ports as $port => $portData) {

// binding type of port matches parameter

if ($portData['bindingType'] == $bindingType) {

// loop through operations for the binding

foreach ($this->bindings[ $portData['binding'] ]

['operations'] as $bOperation => $opData) {

if ($opData['soapAction'] == $soapAction) {

return $opData;

}

Page 623: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

467

}

}

}

}

/**

* returns an array of information about a given type

* returns false if no type exists by the given name

*

* typeDef = array(

* 'elements' => array(), // refs to elements array

* 'restrictionBase' => '',

* 'phpType' => '',

* 'order' => '(sequence|all)',

* 'attrs' => array() // refs to attributes array

* )

*

* @param string $type the type

* @param string $ns namespace (not prefix) of the type

* @return mixed

* @access public

Page 624: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

468

* @see nusoap_xmlschema

*/

function getTypeDef($type, $ns) {

$this->debug("in getTypeDef: type=$type, ns=$ns");

if ((! $ns) && isset($this->namespaces['tns'])) {

$ns = $this->namespaces['tns'];

$this->debug("in getTypeDef: type namespace forced to $ns");

}

if (!isset($this->schemas[$ns])) {

foreach ($this->schemas as $ns0 => $schema0) {

if (strcasecmp($ns, $ns0) == 0) {

$this->debug("in getTypeDef: replacing schema

namespace $ns with $ns0");

$ns = $ns0;

break;

}

}

}

if (isset($this->schemas[$ns])) {

$this->debug("in getTypeDef: have schema for namespace

$ns");

Page 625: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

469

for ($i = 0; $i < count($this->schemas[$ns]); $i++) {

$xs = &$this->schemas[$ns][$i];

$t = $xs->getTypeDef($type);

$this->appendDebug($xs->getDebug());

$xs->clearDebug();

if ($t) {

$this->debug("in getTypeDef: found type

$type");

if (!isset($t['phpType'])) {

// get info for type to tack onto the

element

$uqType = substr($t['type'],

strrpos($t['type'], ':') + 1);

$ns = substr($t['type'], 0,

strrpos($t['type'], ':'));

$etype = $this->getTypeDef($uqType,

$ns);

if ($etype) {

$this->debug("found type for

[element] $type:");

$this->debug($this-

>varDump($etype));

Page 626: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

470

if (isset($etype['phpType'])) {

$t['phpType'] =

$etype['phpType'];

}

if (isset($etype['elements'])) {

$t['elements'] =

$etype['elements'];

}

if (isset($etype['attrs'])) {

$t['attrs'] = $etype['attrs'];

}

} else {

$this->debug("did not find type

for [element] $type");

}

}

return $t;

}

}

$this->debug("in getTypeDef: did not find type $type");

} else {

Page 627: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

471

$this->debug("in getTypeDef: do not have schema for

namespace $ns");

}

return false;

}

/**

* prints html description of services

*

* @access private

*/

function webDescription(){

global $HTTP_SERVER_VARS;

if (isset($_SERVER)) {

$PHP_SELF = $_SERVER['PHP_SELF'];

} elseif (isset($HTTP_SERVER_VARS)) {

$PHP_SELF = $HTTP_SERVER_VARS['PHP_SELF'];

} else {

$this->setError("Neither _SERVER nor

HTTP_SERVER_VARS is available");

Page 628: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

472

}

$b = '

<html><head><title>NuSOAP: '.$this->serviceName.'</title>

<style type="text/css">

body { font-family: arial; color: #000000; background-color:

#ffffff; margin: 0px 0px 0px 0px; }

p { font-family: arial; color: #000000; margin-top: 0px; margin-

bottom: 12px; }

pre { background-color: silver; padding: 5px; font-family: Courier

New; font-size: x-small; color: #000000;}

ul { margin-top: 10px; margin-left: 20px; }

li { list-style-type: none; margin-top: 10px; color: #000000; }

.content{

margin-left: 0px; padding-bottom: 2em; }

.nav {

padding-top: 10px; padding-bottom: 10px; padding-left: 15px;

font-size: .70em;

margin-top: 10px; margin-left: 0px; color: #000000;

background-color: #ccccff; width: 20%; margin-left: 20px;

margin-top: 20px; }

.title {

font-family: arial; font-size: 26px; color: #ffffff;

Page 629: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

473

background-color: #999999; width: 100%;

margin-left: 0px; margin-right: 0px;

padding-top: 10px; padding-bottom: 10px;}

.hidden {

position: absolute; visibility: hidden; z-index: 200; left: 250px;

top: 100px;

font-family: arial; overflow: hidden; width: 600;

padding: 20px; font-size: 10px; background-color: #999999;

layer-background-color:#FFFFFF; }

a,a:active { color: charcoal; font-weight: bold; }

a:visited { color: #666666; font-weight: bold; }

a:hover { color: cc3300; font-weight: bold; }

</style>

<script language="JavaScript" type="text/javascript">

<!--

// POP-UP CAPTIONS...

function lib_bwcheck(){ //Browsercheck (needed)

this.ver=navigator.appVersion

this.agent=navigator.userAgent

this.dom=document.getElementById?1:0

Page 630: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

474

this.opera5=this.agent.indexOf("Opera 5")>-1

this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !

this.opera5)?1:0;

this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !

this.opera5)?1:0;

this.ie4=(document.all && !this.dom && !this.opera5)?1:0;

this.ie=this.ie4||this.ie5||this.ie6

this.mac=this.agent.indexOf("Mac")>-1

this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0;

this.ns4=(document.layers && !this.dom)?1:0;

this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 ||

this.opera5)

return this

}

var bw = new lib_bwcheck()

//Makes crossbrowser object.

function makeObj(obj){

this.evnt=bw.dom? document.getElementById(obj):bw.ie4?

document.all[obj]:bw.ns4?document.layers[obj]:0;

if(!this.evnt) return false

this.css=bw.dom||bw.ie4?this.evnt.style:bw.ns4?this.evnt:0;

Page 631: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

475

this.wref=bw.dom||bw.ie4?this.evnt:bw.ns4?this.css.document:0;

this.writeIt=b_writeIt;

return this

}

// A unit of measure that will be added when setting the position of a layer.

//var px = bw.ns4||window.opera?"":"px";

function b_writeIt(text){

if (bw.ns4){this.wref.write(text);this.wref.close()}

else this.wref.innerHTML = text

}

//Shows the messages

var oDesc;

function popup(divid){

if(oDesc = new makeObj(divid)){

oDesc.css.visibility = "visible"

}

}

function popout(){ // Hides message

if(oDesc) oDesc.css.visibility = "hidden"

}

Page 632: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

476

//-->

</script>

</head>

<body>

<div class=content>

<br><br>

<div class=title>'.$this->serviceName.'</div>

<div class=nav>

<p>View the <a href="'.$PHP_SELF.'?

wsdl">WSDL</a> for the service.

Click on an operation name to view it&apos;s

details.</p>

<ul>';

foreach($this->getOperations() as $op => $data){

$b .= "<li><a href='#'

onclick=\"popout();popup('$op')\">$op</a></li>";

// create hidden div

$b .= "<div id='$op' class='hidden'>

<a href='#' onclick='popout()'><font

color='#ffffff'>Close</font></a><br><br>";

foreach($data as $donnie => $marie){ // loop through

opdata

Page 633: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

477

if($donnie == 'input' || $donnie ==

'output'){ // show input/output data

$b .= "<font

color='white'>".ucfirst($donnie).':</font><br>';

foreach($marie as $captain => $tenille)

{ // loop through data

if($captain == 'parts'){ //

loop thru parts

$b .= "&nbsp;&nbsp;

$captain:<br>";

//if(is_array($tenille)){

foreach($tenille as

$joanie => $chachi){

$b .= "&nbsp;&nbsp;&nbsp;&nbsp;$joanie: $chachi<br>";

}

//}

} else {

$b .= "&nbsp;&nbsp;

$captain: $tenille<br>";

}

}

} else {

Page 634: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

478

$b .= "<font

color='white'>".ucfirst($donnie).":</font> $marie<br>";

}

}

$b .= '</div>';

}

$b .= '

<ul>

</div>

</div></body></html>';

return $b;

}

/**

* serialize the parsed wsdl

*

* @param mixed $debug whether to put debug=1 in endpoint URL

* @return string serialization of WSDL

* @access public

*/

function serialize($debug = 0)

Page 635: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

479

{

$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';

$xml .= "\n<definitions";

foreach($this->namespaces as $k => $v) {

$xml .= " xmlns:$k=\"$v\"";

}

// 10.9.02 - add poulter fix for wsdl and tns declarations

if (isset($this->namespaces['wsdl'])) {

$xml .= " xmlns=\"" . $this->namespaces['wsdl'] . "\"";

}

if (isset($this->namespaces['tns'])) {

$xml .= " targetNamespace=\"" . $this->namespaces['tns'] .

"\"";

}

$xml .= '>';

// imports

if (sizeof($this->import) > 0) {

foreach($this->import as $ns => $list) {

foreach ($list as $ii) {

if ($ii['location'] != '') {

Page 636: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

480

$xml .= '<import location="' .

$ii['location'] . '" namespace="' . $ns . '" />';

} else {

$xml .= '<import namespace="' . $ns .

'" />';

}

}

}

}

// types

if (count($this->schemas)>=1) {

$xml .= "\n<types>\n";

foreach ($this->schemas as $ns => $list) {

foreach ($list as $xs) {

$xml .= $xs->serializeSchema();

}

}

$xml .= '</types>';

}

// messages

if (count($this->messages) >= 1) {

Page 637: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

481

foreach($this->messages as $msgName => $msgParts) {

$xml .= "\n<message name=\"" . $msgName . '">';

if(is_array($msgParts)){

foreach($msgParts as $partName => $partType)

{

// print 'serializing '.$partType.', sv: '.

$this->XMLSchemaVersion.'<br>';

if (strpos($partType, ':')) {

$typePrefix = $this-

>getPrefixFromNamespace($this->getPrefix($partType));

} elseif (isset($this->typemap[$this-

>namespaces['xsd']][$partType])) {

// print 'checking typemap: '.$this-

>XMLSchemaVersion.'<br>';

$typePrefix = 'xsd';

} else {

foreach($this->typemap as $ns =>

$types) {

if (isset($types[$partType])) {

$typePrefix = $this-

>getPrefixFromNamespace($ns);

}

Page 638: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

482

}

if (!isset($typePrefix)) {

die("$partType has no

namespace!");

}

}

$ns = $this-

>getNamespaceFromPrefix($typePrefix);

$localPart = $this-

>getLocalPart($partType);

$typeDef = $this-

>getTypeDef($localPart, $ns);

if ($typeDef['typeClass'] == 'element') {

$elementortype = 'element';

if (substr($localPart, -1) == '^') {

$localPart =

substr($localPart, 0, -1);

}

} else {

$elementortype = 'type';

}

Page 639: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

483

$xml .= "\n" . ' <part name="' .

$partName . '" ' . $elementortype . '="' . $typePrefix . ':' . $localPart . '" />';

}

}

$xml .= '</message>';

}

}

// bindings & porttypes

if (count($this->bindings) >= 1) {

$binding_xml = '';

$portType_xml = '';

foreach($this->bindings as $bindingName => $attrs) {

$binding_xml .= "\n<binding name=\"" . $bindingName

. '" type="tns:' . $attrs['portType'] . '">';

$binding_xml .= "\n" . ' <soap:binding style="' .

$attrs['style'] . '" transport="' . $attrs['transport'] . '"/>';

$portType_xml .= "\n<portType name=\"" .

$attrs['portType'] . '">';

foreach($attrs['operations'] as $opName => $opParts) {

$binding_xml .= "\n" . ' <operation name="' .

$opName . '">';

Page 640: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

484

$binding_xml .= "\n" . ' <soap:operation

soapAction="' . $opParts['soapAction'] . '" style="'. $opParts['style'] . '"/>';

if (isset($opParts['input']['encodingStyle']) &&

$opParts['input']['encodingStyle'] != '') {

$enc_style = ' encodingStyle="' .

$opParts['input']['encodingStyle'] . '"';

} else {

$enc_style = '';

}

$binding_xml .= "\n" . ' <input><soap:body

use="' . $opParts['input']['use'] . '" namespace="' . $opParts['input']['namespace'] . '"' .

$enc_style . '/></input>';

if (isset($opParts['output']['encodingStyle']) &&

$opParts['output']['encodingStyle'] != '') {

$enc_style = ' encodingStyle="' .

$opParts['output']['encodingStyle'] . '"';

} else {

$enc_style = '';

}

$binding_xml .= "\n" . ' <output><soap:body

use="' . $opParts['output']['use'] . '" namespace="' . $opParts['output']['namespace'] .

'"' . $enc_style . '/></output>';

$binding_xml .= "\n" . ' </operation>';

Page 641: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

485

$portType_xml .= "\n" . ' <operation name="' .

$opParts['name'] . '"';

if (isset($opParts['parameterOrder'])) {

$portType_xml .= ' parameterOrder="' .

$opParts['parameterOrder'] . '"';

}

$portType_xml .= '>';

if(isset($opParts['documentation']) &&

$opParts['documentation'] != '') {

$portType_xml .= "\n" . '

<documentation>' . htmlspecialchars($opParts['documentation']) .

'</documentation>';

}

$portType_xml .= "\n" . ' <input

message="tns:' . $opParts['input']['message'] . '"/>';

$portType_xml .= "\n" . ' <output

message="tns:' . $opParts['output']['message'] . '"/>';

$portType_xml .= "\n" . ' </operation>';

}

$portType_xml .= "\n" . '</portType>';

$binding_xml .= "\n" . '</binding>';

}

Page 642: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

486

$xml .= $portType_xml . $binding_xml;

}

// services

$xml .= "\n<service name=\"" . $this->serviceName . '">';

if (count($this->ports) >= 1) {

foreach($this->ports as $pName => $attrs) {

$xml .= "\n" . ' <port name="' . $pName . '"

binding="tns:' . $attrs['binding'] . '">';

$xml .= "\n" . ' <soap:address location="' .

$attrs['location'] . ($debug ? '?debug=1' : '') . '"/>';

$xml .= "\n" . ' </port>';

}

}

$xml .= "\n" . '</service>';

return $xml . "\n</definitions>";

}

/**

* determine whether a set of parameters are unwrapped

* when they are expect to be wrapped, Microsoft-style.

*

Page 643: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

487

* @param string $type the type (element name) of the wrapper

* @param array $parameters the parameter values for the SOAP call

* @return boolean whether they parameters are unwrapped (and should be

wrapped)

* @access private

*/

function parametersMatchWrapped($type, &$parameters) {

$this->debug("in parametersMatchWrapped type=$type,

parameters=");

$this->appendDebug($this->varDump($parameters));

// split type into namespace:unqualified-type

if (strpos($type, ':')) {

$uqType = substr($type, strrpos($type, ':') + 1);

$ns = substr($type, 0, strrpos($type, ':'));

$this->debug("in parametersMatchWrapped: got a prefixed

type: $uqType, $ns");

if ($this->getNamespaceFromPrefix($ns)) {

$ns = $this->getNamespaceFromPrefix($ns);

$this->debug("in parametersMatchWrapped: expanded

prefixed type: $uqType, $ns");

}

Page 644: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

488

} else {

// TODO: should the type be compared to types in XSD, and

the namespace

// set to XSD if the type matches?

$this->debug("in parametersMatchWrapped: No namespace for

type $type");

$ns = '';

$uqType = $type;

}

// get the type information

if (!$typeDef = $this->getTypeDef($uqType, $ns)) {

$this->debug("in parametersMatchWrapped: $type ($uqType)

is not a supported type.");

return false;

}

$this->debug("in parametersMatchWrapped: found typeDef=");

$this->appendDebug($this->varDump($typeDef));

if (substr($uqType, -1) == '^') {

$uqType = substr($uqType, 0, -1);

}

$phpType = $typeDef['phpType'];

Page 645: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

489

$arrayType = (isset($typeDef['arrayType']) ? $typeDef['arrayType'] :

'');

$this->debug("in parametersMatchWrapped: uqType: $uqType, ns:

$ns, phptype: $phpType, arrayType: $arrayType");

// we expect a complexType or element of complexType

if ($phpType != 'struct') {

$this->debug("in parametersMatchWrapped: not a struct");

return false;

}

// see whether the parameter names match the elements

if (isset($typeDef['elements']) && is_array($typeDef['elements'])) {

$elements = 0;

$matches = 0;

foreach ($typeDef['elements'] as $name => $attrs) {

if (isset($parameters[$name])) {

$this->debug("in parametersMatchWrapped:

have parameter named $name");

$matches++;

} else {

Page 646: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

490

$this->debug("in parametersMatchWrapped: do

not have parameter named $name");

}

$elements++;

}

$this->debug("in parametersMatchWrapped: $matches

parameter names match $elements wrapped parameter names");

if ($matches == 0) {

return false;

}

return true;

}

// since there are no elements for the type, if the user passed no

// parameters, the parameters match wrapped.

$this->debug("in parametersMatchWrapped: no elements type $ns:

$uqType");

return count($parameters) == 0;

}

/**

* serialize PHP values according to a WSDL message definition

* contrary to the method name, this is not limited to RPC

Page 647: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

491

*

* TODO

* - multi-ref serialization

* - validate PHP values against type definitions, return errors if invalid

*

* @param string $operation operation name

* @param string $direction (input|output)

* @param mixed $parameters parameter value(s)

* @param string $bindingType (soap|soap12)

* @return mixed parameters serialized as XML or false on error (e.g.

operation not found)

* @access public

*/

function serializeRPCParameters($operation, $direction, $parameters,

$bindingType = 'soap') {

$this->debug("in serializeRPCParameters: operation=$operation,

direction=$direction, XMLSchemaVersion=$this->XMLSchemaVersion,

bindingType=$bindingType");

$this->appendDebug('parameters=' . $this->varDump($parameters));

if ($direction != 'input' && $direction != 'output') {

$this->debug('The value of the \$direction argument needs to

be either "input" or "output"');

Page 648: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

492

$this->setError('The value of the \$direction argument needs to

be either "input" or "output"');

return false;

}

if (!$opData = $this->getOperationData($operation, $bindingType)) {

$this->debug('Unable to retrieve WSDL data for operation: ' .

$operation . ' bindingType: ' . $bindingType);

$this->setError('Unable to retrieve WSDL data for operation: ' .

$operation . ' bindingType: ' . $bindingType);

return false;

}

$this->debug('in serializeRPCParameters: opData:');

$this->appendDebug($this->varDump($opData));

// Get encoding style for output and set to current

$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';

if(($direction == 'input') && isset($opData['output']['encodingStyle'])

&& ($opData['output']['encodingStyle'] != $encodingStyle)) {

$encodingStyle = $opData['output']['encodingStyle'];

$enc_style = $encodingStyle;

}

Page 649: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

493

// set input params

$xml = '';

if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]

['parts']) > 0) {

$parts = &$opData[$direction]['parts'];

$part_count = sizeof($parts);

$style = $opData['style'];

$use = $opData[$direction]['use'];

$this->debug("have $part_count part(s) to serialize using

$style/$use");

if (is_array($parameters)) {

$parametersArrayType = $this-

>isArraySimpleOrStruct($parameters);

$parameter_count = count($parameters);

$this->debug("have $parameter_count parameter(s)

provided as $parametersArrayType to serialize");

// check for Microsoft-style wrapped parameters

if ($style == 'document' && $use == 'literal' &&

$part_count == 1 && isset($parts['parameters'])) {

$this->debug('check whether the caller has

wrapped the parameters');

Page 650: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

494

if ($direction == 'output' &&

$parametersArrayType == 'arraySimple' && $parameter_count == 1) {

// TODO: consider checking here for

double-wrapping, when

// service function wraps, then NuSOAP

wraps again

$this->debug("change simple array to

associative with 'parameters' element");

$parameters['parameters'] =

$parameters[0];

unset($parameters[0]);

}

if (($parametersArrayType == 'arrayStruct' ||

$parameter_count == 0) && !isset($parameters['parameters'])) {

$this->debug('check whether caller\'s

parameters match the wrapped ones');

if ($this-

>parametersMatchWrapped($parts['parameters'], $parameters)) {

$this->debug('wrap the

parameters for the caller');

$parameters = array('parameters'

=> $parameters);

$parameter_count = 1;

Page 651: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

495

}

}

}

foreach ($parts as $name => $type) {

$this->debug("serializing part $name of type

$type");

// Track encoding style

if (isset($opData[$direction]['encodingStyle'])

&& $encodingStyle != $opData[$direction]['encodingStyle']) {

$encodingStyle = $opData[$direction]

['encodingStyle'];

$enc_style = $encodingStyle;

} else {

$enc_style = false;

}

// NOTE: add error handling here

// if serializeType returns false, then catch global

error and fault

if ($parametersArrayType == 'arraySimple') {

$p = array_shift($parameters);

$this->debug('calling serializeType

w/indexed param');

Page 652: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

496

$xml .= $this->serializeType($name,

$type, $p, $use, $enc_style);

} elseif (isset($parameters[$name])) {

$this->debug('calling serializeType

w/named param');

$xml .= $this->serializeType($name,

$type, $parameters[$name], $use, $enc_style);

} else {

// TODO: only send nillable

$this->debug('calling serializeType

w/null param');

$xml .= $this->serializeType($name,

$type, null, $use, $enc_style);

}

}

} else {

$this->debug('no parameters passed.');

}

}

$this->debug("serializeRPCParameters returning: $xml");

return $xml;

}

Page 653: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

497

/**

* serialize a PHP value according to a WSDL message definition

*

* TODO

* - multi-ref serialization

* - validate PHP values against type definitions, return errors if invalid

*

* @param string $operation operation name

* @param string $direction (input|output)

* @param mixed $parameters parameter value(s)

* @return mixed parameters serialized as XML or false on error (e.g.

operation not found)

* @access public

* @deprecated

*/

function serializeParameters($operation, $direction, $parameters)

{

$this->debug("in serializeParameters: operation=$operation,

direction=$direction, XMLSchemaVersion=$this->XMLSchemaVersion");

$this->appendDebug('parameters=' . $this->varDump($parameters));

Page 654: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

498

if ($direction != 'input' && $direction != 'output') {

$this->debug('The value of the \$direction argument needs to

be either "input" or "output"');

$this->setError('The value of the \$direction argument needs to

be either "input" or "output"');

return false;

}

if (!$opData = $this->getOperationData($operation)) {

$this->debug('Unable to retrieve WSDL data for operation: ' .

$operation);

$this->setError('Unable to retrieve WSDL data for operation: ' .

$operation);

return false;

}

$this->debug('opData:');

$this->appendDebug($this->varDump($opData));

// Get encoding style for output and set to current

$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';

if(($direction == 'input') && isset($opData['output']['encodingStyle'])

&& ($opData['output']['encodingStyle'] != $encodingStyle)) {

$encodingStyle = $opData['output']['encodingStyle'];

Page 655: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

499

$enc_style = $encodingStyle;

}

// set input params

$xml = '';

if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]

['parts']) > 0) {

$use = $opData[$direction]['use'];

$this->debug("use=$use");

$this->debug('got ' . count($opData[$direction]['parts']) . '

part(s)');

if (is_array($parameters)) {

$parametersArrayType = $this-

>isArraySimpleOrStruct($parameters);

$this->debug('have ' . $parametersArrayType . '

parameters');

foreach($opData[$direction]['parts'] as $name => $type)

{

$this->debug('serializing part "'.$name.'" of type

"'.$type.'"');

// Track encoding style

Page 656: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

500

if(isset($opData[$direction]['encodingStyle'])

&& $encodingStyle != $opData[$direction]['encodingStyle']) {

$encodingStyle = $opData[$direction]

['encodingStyle'];

$enc_style = $encodingStyle;

} else {

$enc_style = false;

}

// NOTE: add error handling here

// if serializeType returns false, then catch global

error and fault

if ($parametersArrayType == 'arraySimple') {

$p = array_shift($parameters);

$this->debug('calling serializeType

w/indexed param');

$xml .= $this->serializeType($name,

$type, $p, $use, $enc_style);

} elseif (isset($parameters[$name])) {

$this->debug('calling serializeType

w/named param');

$xml .= $this->serializeType($name,

$type, $parameters[$name], $use, $enc_style);

Page 657: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

501

} else {

// TODO: only send nillable

$this->debug('calling serializeType

w/null param');

$xml .= $this->serializeType($name,

$type, null, $use, $enc_style);

}

}

} else {

$this->debug('no parameters passed.');

}

}

$this->debug("serializeParameters returning: $xml");

return $xml;

}

/**

* serializes a PHP value according a given type definition

*

* @param string $name name of value (part or element)

* @param string $type XML schema type of value (type or element)

Page 658: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

502

* @param mixed $value a native PHP value (parameter value)

* @param string $use use for part (encoded|literal)

* @param string $encodingStyle SOAP encoding style for the value (if

different than the enclosing style)

* @param boolean $unqualified a kludge for what should be XML

namespace form handling

* @return string value serialized as an XML string

* @access private

*/

function serializeType($name, $type, $value, $use='encoded',

$encodingStyle=false, $unqualified=false)

{

$this->debug("in serializeType: name=$name, type=$type, use=$use,

encodingStyle=$encodingStyle, unqualified=" . ($unqualified ? "unqualified" :

"qualified"));

$this->appendDebug("value=" . $this->varDump($value));

if($use == 'encoded' && $encodingStyle) {

$encodingStyle = ' SOAP-ENV:encodingStyle="' .

$encodingStyle . '"';

}

// if a soapval has been supplied, let its type override the WSDL

if (is_object($value) && get_class($value) == 'soapval') {

Page 659: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

503

if ($value->type_ns) {

$type = $value->type_ns . ':' . $value->type;

$forceType = true;

$this->debug("in serializeType: soapval overrides type to

$type");

} elseif ($value->type) {

$type = $value->type;

$forceType = true;

$this->debug("in serializeType: soapval overrides type to

$type");

} else {

$forceType = false;

$this->debug("in serializeType: soapval does not override

type");

}

$attrs = $value->attributes;

$value = $value->value;

$this->debug("in serializeType: soapval overrides value to $value");

if ($attrs) {

if (!is_array($value)) {

$value['!'] = $value;

Page 660: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

504

}

foreach ($attrs as $n => $v) {

$value['!' . $n] = $v;

}

$this->debug("in serializeType: soapval provides attributes");

}

} else {

$forceType = false;

}

$xml = '';

if (strpos($type, ':')) {

$uqType = substr($type, strrpos($type, ':') + 1);

$ns = substr($type, 0, strrpos($type, ':'));

$this->debug("in serializeType: got a prefixed type: $uqType,

$ns");

if ($this->getNamespaceFromPrefix($ns)) {

$ns = $this->getNamespaceFromPrefix($ns);

$this->debug("in serializeType: expanded prefixed type:

$uqType, $ns");

}

Page 661: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

505

if($ns == $this->XMLSchemaVersion || $ns ==

'http://schemas.xmlsoap.org/soap/encoding/'){

$this->debug('in serializeType: type namespace

indicates XML Schema or SOAP Encoding type');

if ($unqualified && $use == 'literal') {

$elementNS = " xmlns=\"\"";

} else {

$elementNS = '';

}

if (is_null($value)) {

if ($use == 'literal') {

// TODO: depends on minOccurs

$xml = "<$name$elementNS/>";

} else {

// TODO: depends on nillable, which

should be checked before calling this method

$xml = "<$name$elementNS

xsi:nil=\"true\" xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"/>";

}

$this->debug("in serializeType: returning:

$xml");

return $xml;

Page 662: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

506

}

if ($uqType == 'Array') {

// JBoss/Axis does this sometimes

return $this->serialize_val($value, $name, false,

false, false, false, $use);

}

if ($uqType == 'boolean') {

if ((is_string($value) && $value == 'false') || (! $value))

{

$value = 'false';

} else {

$value = 'true';

}

}

if ($uqType == 'string' && gettype($value) == 'string') {

$value = $this->expandEntities($value);

}

if (($uqType == 'long' || $uqType == 'unsignedLong')

&& gettype($value) == 'double') {

$value = sprintf("%.0lf", $value);

}

Page 663: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

507

// it's a scalar

// TODO: what about null/nil values?

// check type isn't a custom type extending xmlschema

namespace

if (!$this->getTypeDef($uqType, $ns)) {

if ($use == 'literal') {

if ($forceType) {

$xml = "<$name$elementNS

xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">$value</

$name>";

} else {

$xml =

"<$name$elementNS>$value</$name>";

}

} else {

$xml = "<$name$elementNS xsi:type=\""

. $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value</

$name>";

}

$this->debug("in serializeType: returning:

$xml");

return $xml;

Page 664: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

508

}

$this->debug('custom type extends XML Schema or

SOAP Encoding namespace (yuck)');

} else if ($ns == 'http://xml.apache.org/xml-soap') {

$this->debug('in serializeType: appears to be Apache

SOAP type');

if ($uqType == 'Map') {

$tt_prefix = $this-

>getPrefixFromNamespace('http://xml.apache.org/xml-soap');

if (! $tt_prefix) {

$this->debug('in serializeType: Add

namespace for Apache SOAP type');

$tt_prefix = 'ns' . rand(1000, 9999);

$this->namespaces[$tt_prefix] =

'http://xml.apache.org/xml-soap';

// force this to be added to

usedNamespaces

$tt_prefix = $this-

>getPrefixFromNamespace('http://xml.apache.org/xml-soap');

}

$contents = '';

foreach($value as $k => $v) {

Page 665: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

509

$this->debug("serializing map element:

key $k, value $v");

$contents .= '<item>';

$contents .= $this-

>serialize_val($k,'key',false,false,false,false,$use);

$contents .= $this-

>serialize_val($v,'value',false,false,false,false,$use);

$contents .= '</item>';

}

if ($use == 'literal') {

if ($forceType) {

$xml = "<$name xsi:type=\"" .

$tt_prefix . ":$uqType\">$contents</$name>";

} else {

$xml = "<$name>$contents</

$name>";

}

} else {

$xml = "<$name xsi:type=\"" .

$tt_prefix . ":$uqType\"$encodingStyle>$contents</$name>";

}

Page 666: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

510

$this->debug("in serializeType: returning:

$xml");

return $xml;

}

$this->debug('in serializeType: Apache SOAP type, but

only support Map');

}

} else {

// TODO: should the type be compared to types in XSD, and

the namespace

// set to XSD if the type matches?

$this->debug("in serializeType: No namespace for type $type");

$ns = '';

$uqType = $type;

}

if(!$typeDef = $this->getTypeDef($uqType, $ns)){

$this->setError("$type ($uqType) is not a supported type.");

$this->debug("in serializeType: $type ($uqType) is not a

supported type.");

return false;

} else {

Page 667: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

511

$this->debug("in serializeType: found typeDef");

$this->appendDebug('typeDef=' . $this->varDump($typeDef));

if (substr($uqType, -1) == '^') {

$uqType = substr($uqType, 0, -1);

}

}

if (!isset($typeDef['phpType'])) {

$this->setError("$type ($uqType) has no phpType.");

$this->debug("in serializeType: $type ($uqType) has no

phpType.");

return false;

}

$phpType = $typeDef['phpType'];

$this->debug("in serializeType: uqType: $uqType, ns: $ns, phptype:

$phpType, arrayType: " . (isset($typeDef['arrayType']) ? $typeDef['arrayType'] : '') );

// if php type == struct, map value to the <all> element names

if ($phpType == 'struct') {

if (isset($typeDef['typeClass']) && $typeDef['typeClass'] ==

'element') {

$elementName = $uqType;

Page 668: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

512

if (isset($typeDef['form']) && ($typeDef['form'] ==

'qualified')) {

$elementNS = " xmlns=\"$ns\"";

} else {

$elementNS = " xmlns=\"\"";

}

} else {

$elementName = $name;

if ($unqualified) {

$elementNS = " xmlns=\"\"";

} else {

$elementNS = '';

}

}

if (is_null($value)) {

if ($use == 'literal') {

// TODO: depends on minOccurs and nillable

$xml = "<$elementName$elementNS/>";

} else {

$xml = "<$elementName$elementNS

xsi:nil=\"true\" xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"/>";

Page 669: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

513

}

$this->debug("in serializeType: returning: $xml");

return $xml;

}

if (is_object($value)) {

$value = get_object_vars($value);

}

if (is_array($value)) {

$elementAttrs = $this-

>serializeComplexTypeAttributes($typeDef, $value, $ns, $uqType);

if ($use == 'literal') {

if ($forceType) {

$xml =

"<$elementName$elementNS$elementAttrs xsi:type=\"" . $this-

>getPrefixFromNamespace($ns) . ":$uqType\">";

} else {

$xml =

"<$elementName$elementNS$elementAttrs>";

}

} else {

Page 670: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

514

$xml =

"<$elementName$elementNS$elementAttrs xsi:type=\"" . $this-

>getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>";

}

if (isset($typeDef['simpleContent']) &&

$typeDef['simpleContent'] == 'true') {

if (isset($value['!'])) {

$xml .= $value['!'];

$this->debug("in serializeType: serialized

simpleContent for type $type");

} else {

$this->debug("in serializeType: no

simpleContent to serialize for type $type");

}

} else {

// complexContent

$xml .= $this-

>serializeComplexTypeElements($typeDef, $value, $ns, $uqType, $use,

$encodingStyle);

}

$xml .= "</$elementName>";

} else {

Page 671: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

515

$this->debug("in serializeType: phpType is struct, but

value is not an array");

$this->setError("phpType is struct, but value is not an

array: see debug output for details");

$xml = '';

}

} elseif ($phpType == 'array') {

if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified'))

{

$elementNS = " xmlns=\"$ns\"";

} else {

if ($unqualified) {

$elementNS = " xmlns=\"\"";

} else {

$elementNS = '';

}

}

if (is_null($value)) {

if ($use == 'literal') {

// TODO: depends on minOccurs

$xml = "<$name$elementNS/>";

Page 672: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

516

} else {

$xml = "<$name$elementNS xsi:nil=\"true\"

xsi:type=\"" .

$this-

>getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/') .

":Array\" " .

$this-

>getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/') .

':arrayType="' .

$this->getPrefixFromNamespace($this-

>getPrefix($typeDef['arrayType'])) .

':' .

$this-

>getLocalPart($typeDef['arrayType'])."[0]\"/>";

}

$this->debug("in serializeType: returning: $xml");

return $xml;

}

if (isset($typeDef['multidimensional'])) {

$nv = array();

foreach($value as $v) {

$cols = ',' . sizeof($v);

Page 673: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

517

$nv = array_merge($nv, $v);

}

$value = $nv;

} else {

$cols = '';

}

if (is_array($value) && sizeof($value) >= 1) {

$rows = sizeof($value);

$contents = '';

foreach($value as $k => $v) {

$this->debug("serializing array element: $k, $v

of type: $typeDef[arrayType]");

//if (strpos($typeDef['arrayType'], ':') ) {

if (!in_array($typeDef['arrayType'],$this-

>typemap['http://www.w3.org/2001/XMLSchema'])) {

$contents .= $this->serializeType('item',

$typeDef['arrayType'], $v, $use);

} else {

$contents .= $this->serialize_val($v, 'item',

$typeDef['arrayType'], null, $this->XMLSchemaVersion, false, $use);

}

Page 674: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

518

}

} else {

$rows = 0;

$contents = null;

}

// TODO: for now, an empty value will be serialized as a zero

element

// array. Revisit this when coding the handling of null/nil

values.

if ($use == 'literal') {

$xml = "<$name$elementNS>"

.$contents

."</$name>";

} else {

$xml = "<$name$elementNS xsi:type=\"".$this-

>getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/').':Array" '.

$this-

>getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/')

.':arrayType="'

.$this->getPrefixFromNamespace($this-

>getPrefix($typeDef['arrayType']))

Page 675: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

519

.":".$this-

>getLocalPart($typeDef['arrayType'])."[$rows$cols]\">"

.$contents

."</$name>";

}

} elseif ($phpType == 'scalar') {

if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified'))

{

$elementNS = " xmlns=\"$ns\"";

} else {

if ($unqualified) {

$elementNS = " xmlns=\"\"";

} else {

$elementNS = '';

}

}

if ($use == 'literal') {

if ($forceType) {

$xml = "<$name$elementNS xsi:type=\"" .

$this->getPrefixFromNamespace($ns) . ":$uqType\">$value</$name>";

} else {

Page 676: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

520

$xml = "<$name$elementNS>$value</$name>";

}

} else {

$xml = "<$name$elementNS xsi:type=\"" . $this-

>getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value</$name>";

}

}

$this->debug("in serializeType: returning: $xml");

return $xml;

}

/**

* serializes the attributes for a complexType

*

* @param array $typeDef our internal representation of an XML schema type

(or element)

* @param mixed $value a native PHP value (parameter value)

* @param string $ns the namespace of the type

* @param string $uqType the local part of the type

* @return string value serialized as an XML string

* @access private

*/

Page 677: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

521

function serializeComplexTypeAttributes($typeDef, $value, $ns, $uqType) {

$this->debug("serializeComplexTypeAttributes for XML Schema type

$ns:$uqType");

$xml = '';

if (isset($typeDef['extensionBase'])) {

$nsx = $this->getPrefix($typeDef['extensionBase']);

$uqTypex = $this->getLocalPart($typeDef['extensionBase']);

if ($this->getNamespaceFromPrefix($nsx)) {

$nsx = $this->getNamespaceFromPrefix($nsx);

}

if ($typeDefx = $this->getTypeDef($uqTypex, $nsx)) {

$this->debug("serialize attributes for extension base

$nsx:$uqTypex");

$xml .= $this-

>serializeComplexTypeAttributes($typeDefx, $value, $nsx, $uqTypex);

} else {

$this->debug("extension base $nsx:$uqTypex is not a

supported type");

}

}

if (isset($typeDef['attrs']) && is_array($typeDef['attrs'])) {

Page 678: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

522

$this->debug("serialize attributes for XML Schema type $ns:

$uqType");

if (is_array($value)) {

$xvalue = $value;

} elseif (is_object($value)) {

$xvalue = get_object_vars($value);

} else {

$this->debug("value is neither an array nor an object for

XML Schema type $ns:$uqType");

$xvalue = array();

}

foreach ($typeDef['attrs'] as $aName => $attrs) {

if (isset($xvalue['!' . $aName])) {

$xname = '!' . $aName;

$this->debug("value provided for attribute

$aName with key $xname");

} elseif (isset($xvalue[$aName])) {

$xname = $aName;

$this->debug("value provided for attribute

$aName with key $xname");

} elseif (isset($attrs['default'])) {

Page 679: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

523

$xname = '!' . $aName;

$xvalue[$xname] = $attrs['default'];

$this->debug('use default value of ' .

$xvalue[$aName] . ' for attribute ' . $aName);

} else {

$xname = '';

$this->debug("no value provided for attribute

$aName");

}

if ($xname) {

$xml .= " $aName=\"" . $this-

>expandEntities($xvalue[$xname]) . "\"";

}

}

} else {

$this->debug("no attributes to serialize for XML Schema type

$ns:$uqType");

}

return $xml;

}

Page 680: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

524

/**

* serializes the elements for a complexType

*

* @param array $typeDef our internal representation of an XML schema type

(or element)

* @param mixed $value a native PHP value (parameter value)

* @param string $ns the namespace of the type

* @param string $uqType the local part of the type

* @param string $use use for part (encoded|literal)

* @param string $encodingStyle SOAP encoding style for the value (if

different than the enclosing style)

* @return string value serialized as an XML string

* @access private

*/

function serializeComplexTypeElements($typeDef, $value, $ns, $uqType,

$use='encoded', $encodingStyle=false) {

$this->debug("in serializeComplexTypeElements for XML Schema

type $ns:$uqType");

$xml = '';

if (isset($typeDef['extensionBase'])) {

$nsx = $this->getPrefix($typeDef['extensionBase']);

Page 681: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

525

$uqTypex = $this->getLocalPart($typeDef['extensionBase']);

if ($this->getNamespaceFromPrefix($nsx)) {

$nsx = $this->getNamespaceFromPrefix($nsx);

}

if ($typeDefx = $this->getTypeDef($uqTypex, $nsx)) {

$this->debug("serialize elements for extension base

$nsx:$uqTypex");

$xml .= $this-

>serializeComplexTypeElements($typeDefx, $value, $nsx, $uqTypex, $use,

$encodingStyle);

} else {

$this->debug("extension base $nsx:$uqTypex is not a

supported type");

}

}

if (isset($typeDef['elements']) && is_array($typeDef['elements'])) {

$this->debug("in serializeComplexTypeElements, serialize

elements for XML Schema type $ns:$uqType");

if (is_array($value)) {

$xvalue = $value;

} elseif (is_object($value)) {

$xvalue = get_object_vars($value);

Page 682: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

526

} else {

$this->debug("value is neither an array nor an object for

XML Schema type $ns:$uqType");

$xvalue = array();

}

// toggle whether all elements are present - ideally should

validate against schema

if (count($typeDef['elements']) != count($xvalue)){

$optionals = true;

}

foreach ($typeDef['elements'] as $eName => $attrs) {

if (!isset($xvalue[$eName])) {

if (isset($attrs['default'])) {

$xvalue[$eName] = $attrs['default'];

$this->debug('use default value of ' .

$xvalue[$eName] . ' for element ' . $eName);

}

}

// if user took advantage of a minOccurs=0, then only

serialize named parameters

if (isset($optionals)

Page 683: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

527

&& (!isset($xvalue[$eName]))

&& ( (!isset($attrs['nillable'])) ||

$attrs['nillable'] != 'true')

){

if (isset($attrs['minOccurs']) &&

$attrs['minOccurs'] <> '0') {

$this->debug("apparent error: no value

provided for element $eName with minOccurs=" . $attrs['minOccurs']);

}

// do nothing

$this->debug("no value provided for

complexType element $eName and element is not nillable, so serialize nothing");

} else {

// get value

if (isset($xvalue[$eName])) {

$v = $xvalue[$eName];

} else {

$v = null;

}

if (isset($attrs['form'])) {

$unqualified = ($attrs['form'] ==

'unqualified');

Page 684: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

528

} else {

$unqualified = false;

}

if (isset($attrs['maxOccurs']) &&

($attrs['maxOccurs'] == 'unbounded' || $attrs['maxOccurs'] > 1) && isset($v) &&

is_array($v) && $this->isArraySimpleOrStruct($v) == 'arraySimple') {

$vv = $v;

foreach ($vv as $k => $v) {

if (isset($attrs['type']) ||

isset($attrs['ref'])) {

// serialize schema-defined

type

$xml .= $this-

>serializeType($eName, isset($attrs['type']) ? $attrs['type'] : $attrs['ref'], $v, $use,

$encodingStyle, $unqualified);

} else {

// serialize generic type

(can this ever really happen?)

$this->debug("calling

serialize_val() for $v, $eName, false, false, false, false, $use");

$xml .= $this->serialize_val($v,

$eName, false, false, false, false, $use);

}

Page 685: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

529

}

} else {

if (is_null($v) &&

isset($attrs['minOccurs']) && $attrs['minOccurs'] == '0') {

// do nothing

} elseif (is_null($v) &&

isset($attrs['nillable']) && $attrs['nillable'] == 'true') {

// TODO: serialize a nil correctly,

but for now serialize schema-defined type

$xml .= $this->serializeType($eName,

isset($attrs['type']) ? $attrs['type'] : $attrs['ref'], $v, $use, $encodingStyle,

$unqualified);

} elseif (isset($attrs['type']) ||

isset($attrs['ref'])) {

// serialize schema-defined type

$xml .= $this->serializeType($eName,

isset($attrs['type']) ? $attrs['type'] : $attrs['ref'], $v, $use, $encodingStyle,

$unqualified);

} else {

// serialize generic type (can this

ever really happen?)

$this->debug("calling serialize_val()

for $v, $eName, false, false, false, false, $use");

Page 686: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

530

$xml .= $this->serialize_val($v,

$eName, false, false, false, false, $use);

}

}

}

}

} else {

$this->debug("no elements to serialize for XML Schema type

$ns:$uqType");

}

return $xml;

}

/**

* adds an XML Schema complex type to the WSDL types

*

* @param string $name

* @param string $typeClass (complexType|simpleType|attribute)

* @param string $phpType currently supported are array and struct (php assoc

array)

* @param string $compositor (all|sequence|choice)

Page 687: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

531

* @param string $restrictionBase namespace:name

(http://schemas.xmlsoap.org/soap/encoding/:Array)

* @param array $elements e.g. array ( name => array(name=>'',type=>'') )

* @param array $attrs e.g. array(array('ref'=>'SOAP-

ENC:arrayType','wsdl:arrayType'=>'xsd:string[]'))

* @param string $arrayType as namespace:name (xsd:string)

* @see nusoap_xmlschema

* @access public

*/

function addComplexType($name,$typeClass='complexType',

$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),

$arrayType='') {

if (count($elements) > 0) {

$eElements = array();

foreach($elements as $n => $e){

// expand each element

$ee = array();

foreach ($e as $k => $v) {

$k = strpos($k,':') ? $this->expandQname($k) : $k;

$v = strpos($v,':') ? $this->expandQname($v) : $v;

$ee[$k] = $v;

Page 688: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

532

}

$eElements[$n] = $ee;

}

$elements = $eElements;

}

if (count($attrs) > 0) {

foreach($attrs as $n => $a){

// expand each attribute

foreach ($a as $k => $v) {

$k = strpos($k,':') ? $this->expandQname($k) : $k;

$v = strpos($v,':') ? $this->expandQname($v) : $v;

$aa[$k] = $v;

}

$eAttrs[$n] = $aa;

}

$attrs = $eAttrs;

}

$restrictionBase = strpos($restrictionBase,':') ? $this-

>expandQname($restrictionBase) : $restrictionBase;

Page 689: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

533

$arrayType = strpos($arrayType,':') ? $this-

>expandQname($arrayType) : $arrayType;

$typens = isset($this->namespaces['types']) ? $this-

>namespaces['types'] : $this->namespaces['tns'];

$this->schemas[$typens][0]->addComplexType($name,$typeClass,

$phpType,$compositor,$restrictionBase,$elements,$attrs,$arrayType);

}

/**

* adds an XML Schema simple type to the WSDL types

*

* @param string $name

* @param string $restrictionBase namespace:name

(http://schemas.xmlsoap.org/soap/encoding/:Array)

* @param string $typeClass (should always be simpleType)

* @param string $phpType (should always be scalar)

* @param array $enumeration array of values

* @see nusoap_xmlschema

* @access public

*/

function addSimpleType($name, $restrictionBase='', $typeClass='simpleType',

$phpType='scalar', $enumeration=array()) {

Page 690: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

534

$restrictionBase = strpos($restrictionBase,':') ? $this-

>expandQname($restrictionBase) : $restrictionBase;

$typens = isset($this->namespaces['types']) ? $this-

>namespaces['types'] : $this->namespaces['tns'];

$this->schemas[$typens][0]->addSimpleType($name, $restrictionBase,

$typeClass, $phpType, $enumeration);

}

/**

* adds an element to the WSDL types

*

* @param array $attrs attributes that must include name and type

* @see nusoap_xmlschema

* @access public

*/

function addElement($attrs) {

$typens = isset($this->namespaces['types']) ? $this-

>namespaces['types'] : $this->namespaces['tns'];

$this->schemas[$typens][0]->addElement($attrs);

}

/**

Page 691: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

535

* register an operation with the server

*

* @param string $name operation (method) name

* @param array $in assoc array of input values: key = param name, value =

param type

* @param array $out assoc array of output values: key = param name, value =

param type

* @param string $namespace optional The namespace for the operation

* @param string $soapaction optional The soapaction for the operation

* @param string $style (rpc|document) optional The style for the operation

Note: when 'document' is specified, parameter and return wrappers are created for you

automatically

* @param string $use (encoded|literal) optional The use for the parameters

(cannot mix right now)

* @param string $documentation optional The description to include in the

WSDL

* @param string $encodingStyle optional (usually

'http://schemas.xmlsoap.org/soap/encoding/' for encoded)

* @access public

*/

function addOperation($name, $in = false, $out = false, $namespace = false,

$soapaction = false, $style = 'rpc', $use = 'encoded', $documentation = '',

$encodingStyle = ''){

Page 692: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

536

if ($use == 'encoded' && $encodingStyle == '') {

$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';

}

if ($style == 'document') {

$elements = array();

foreach ($in as $n => $t) {

$elements[$n] = array('name' => $n, 'type' => $t, 'form'

=> 'unqualified');

}

$this->addComplexType($name . 'RequestType',

'complexType', 'struct', 'all', '', $elements);

$this->addElement(array('name' => $name, 'type' => $name .

'RequestType'));

$in = array('parameters' => 'tns:' . $name . '^');

$elements = array();

foreach ($out as $n => $t) {

$elements[$n] = array('name' => $n, 'type' => $t, 'form'

=> 'unqualified');

}

Page 693: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

537

$this->addComplexType($name . 'ResponseType',

'complexType', 'struct', 'all', '', $elements);

$this->addElement(array('name' => $name . 'Response', 'type'

=> $name . 'ResponseType', 'form' => 'qualified'));

$out = array('parameters' => 'tns:' . $name . 'Response' . '^');

}

// get binding

$this->bindings[ $this->serviceName . 'Binding' ]['operations'][$name]

=

array(

'name' => $name,

'binding' => $this->serviceName . 'Binding',

'endpoint' => $this->endpoint,

'soapAction' => $soapaction,

'style' => $style,

'input' => array(

'use' => $use,

'namespace' => $namespace,

'encodingStyle' => $encodingStyle,

'message' => $name . 'Request',

'parts' => $in),

Page 694: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

538

'output' => array(

'use' => $use,

'namespace' => $namespace,

'encodingStyle' => $encodingStyle,

'message' => $name . 'Response',

'parts' => $out),

'namespace' => $namespace,

'transport' => 'http://schemas.xmlsoap.org/soap/http',

'documentation' => $documentation);

// add portTypes

// add messages

if($in)

{

foreach($in as $pName => $pType)

{

if(strpos($pType,':')) {

$pType = $this-

>getNamespaceFromPrefix($this->getPrefix($pType)).":".$this-

>getLocalPart($pType);

}

$this->messages[$name.'Request'][$pName] = $pType;

Page 695: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

539

}

} else {

$this->messages[$name.'Request']= '0';

}

if($out)

{

foreach($out as $pName => $pType)

{

if(strpos($pType,':')) {

$pType = $this-

>getNamespaceFromPrefix($this->getPrefix($pType)).":".$this-

>getLocalPart($pType);

}

$this->messages[$name.'Response'][$pName] =

$pType;

}

} else {

$this->messages[$name.'Response']= '0';

}

return true;

}

Page 696: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

540

}

?><?php

/**

*

* nusoap_parser class parses SOAP XML messages into native PHP values

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_parser extends nusoap_base {

var $xml = '';

var $xml_encoding = '';

var $method = '';

var $root_struct = '';

var $root_struct_name = '';

var $root_struct_namespace = '';

var $root_header = '';

var $document = ''; // incoming SOAP body (text)

Page 697: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

541

// determines where in the message we are (envelope,header,body,method)

var $status = '';

var $position = 0;

var $depth = 0;

var $default_namespace = '';

var $namespaces = array();

var $message = array();

var $parent = '';

var $fault = false;

var $fault_code = '';

var $fault_str = '';

var $fault_detail = '';

var $depth_array = array();

var $debug_flag = true;

var $soapresponse = NULL; // parsed SOAP Body

var $soapheader = NULL; // parsed SOAP Header

var $responseHeaders = ''; // incoming SOAP headers (text)

var $body_position = 0;

// for multiref parsing:

// array of id => pos

Page 698: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

542

var $ids = array();

// array of id => hrefs => pos

var $multirefs = array();

// toggle for auto-decoding element content

var $decode_utf8 = true;

/**

* constructor that actually does the parsing

*

* @param string $xml SOAP message

* @param string $encoding character encoding scheme of message

* @param string $method method for which XML is parsed (unused?)

* @param string $decode_utf8 whether to decode UTF-8 to ISO-8859-1

* @access public

*/

function nusoap_parser($xml,$encoding='UTF-8',$method='',

$decode_utf8=true){

parent::nusoap_base();

$this->xml = $xml;

$this->xml_encoding = $encoding;

Page 699: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

543

$this->method = $method;

$this->decode_utf8 = $decode_utf8;

// Check whether content has been read.

if(!empty($xml)){

// Check XML encoding

$pos_xml = strpos($xml, '<?xml');

if ($pos_xml !== FALSE) {

$xml_decl = substr($xml, $pos_xml, strpos($xml, '?>',

$pos_xml + 2) - $pos_xml + 1);

if (preg_match("/encoding=[\"']([^\"']*)[\"']/",

$xml_decl, $res)) {

$xml_encoding = $res[1];

if (strtoupper($xml_encoding) != $encoding) {

$err = "Charset from HTTP Content-Type

'" . $encoding . "' does not match encoding from XML declaration '" .

$xml_encoding . "'";

$this->debug($err);

if ($encoding != 'ISO-8859-1' ||

strtoupper($xml_encoding) != 'UTF-8') {

$this->setError($err);

return;

}

Page 700: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

544

// when HTTP says ISO-8859-1 (the

default) and XML says UTF-8 (the typical), assume the other endpoint is just sloppy

and proceed

} else {

$this->debug('Charset from HTTP

Content-Type matches encoding from XML declaration');

}

} else {

$this->debug('No encoding specified in XML

declaration');

}

} else {

$this->debug('No XML declaration');

}

$this->debug('Entering nusoap_parser(), length='.strlen($xml).',

encoding='.$encoding);

// Create an XML parser - why not xml_parser_create_ns?

$this->parser = xml_parser_create($this->xml_encoding);

// Set the options for parsing the XML data.

//xml_parser_set_option($parser,

XML_OPTION_SKIP_WHITE, 1);

Page 701: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

545

xml_parser_set_option($this->parser,

XML_OPTION_CASE_FOLDING, 0);

xml_parser_set_option($this->parser,

XML_OPTION_TARGET_ENCODING, $this->xml_encoding);

// Set the object for the parser.

xml_set_object($this->parser, $this);

// Set the element handlers for the parser.

xml_set_element_handler($this->parser,

'start_element','end_element');

xml_set_character_data_handler($this->parser,'character_data');

// Parse the XML file.

if(!xml_parse($this->parser,$xml,true)){

// Display an error message.

$err = sprintf('XML error parsing SOAP payload on line %d:

%s',

xml_get_current_line_number($this->parser),

xml_error_string(xml_get_error_code($this->parser)));

$this->debug($err);

$this->debug("XML payload:\n" . $xml);

$this->setError($err);

} else {

Page 702: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

546

$this->debug('in nusoap_parser ctor, message:');

$this->appendDebug($this->varDump($this-

>message));

$this->debug('parsed successfully, found root struct: '.

$this->root_struct.' of name '.$this->root_struct_name);

// get final value

$this->soapresponse = $this->message[$this-

>root_struct]['result'];

// get header value

if($this->root_header != '' && isset($this-

>message[$this->root_header]['result'])){

$this->soapheader = $this->message[$this-

>root_header]['result'];

}

// resolve hrefs/ids

if(sizeof($this->multirefs) > 0){

foreach($this->multirefs as $id => $hrefs){

$this->debug('resolving multirefs for id: '.

$id);

$idVal = $this->buildVal($this-

>ids[$id]);

if (is_array($idVal) && isset($idVal['!

id'])) {

Page 703: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

547

unset($idVal['!id']);

}

foreach($hrefs as $refPos => $ref){

$this->debug('resolving href at

pos '.$refPos);

$this->multirefs[$id][$refPos] =

$idVal;

}

}

}

}

xml_parser_free($this->parser);

} else {

$this->debug('xml was empty, didn\'t parse!');

$this->setError('xml was empty, didn\'t parse!');

}

}

/**

* start-element handler

*

Page 704: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

548

* @param resource $parser XML parser object

* @param string $name element name

* @param array $attrs associative array of attributes

* @access private

*/

function start_element($parser, $name, $attrs) {

// position in a total number of elements, starting from 0

// update class level pos

$pos = $this->position++;

// and set mine

$this->message[$pos] = array('pos' => $pos,'children'=>'','cdata'=>'');

// depth = how many levels removed from root?

// set mine as current global depth and increment global depth value

$this->message[$pos]['depth'] = $this->depth++;

// else add self as child to whoever the current parent is

if($pos != 0){

$this->message[$this->parent]['children'] .= '|'.$pos;

}

// set my parent

Page 705: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

549

$this->message[$pos]['parent'] = $this->parent;

// set self as current parent

$this->parent = $pos;

// set self as current value for this depth

$this->depth_array[$this->depth] = $pos;

// get element prefix

if(strpos($name,':')){

// get ns prefix

$prefix = substr($name,0,strpos($name,':'));

// get unqualified name

$name = substr(strstr($name,':'),1);

}

// set status

if ($name == 'Envelope' && $this->status == '') {

$this->status = 'envelope';

} elseif ($name == 'Header' && $this->status == 'envelope') {

$this->root_header = $pos;

$this->status = 'header';

} elseif ($name == 'Body' && $this->status == 'envelope'){

$this->status = 'body';

Page 706: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

550

$this->body_position = $pos;

// set method

} elseif($this->status == 'body' && $pos == ($this->body_position+1))

{

$this->status = 'method';

$this->root_struct_name = $name;

$this->root_struct = $pos;

$this->message[$pos]['type'] = 'struct';

$this->debug("found root struct $this->root_struct_name, pos

$this->root_struct");

}

// set my status

$this->message[$pos]['status'] = $this->status;

// set name

$this->message[$pos]['name'] = htmlspecialchars($name);

// set attrs

$this->message[$pos]['attrs'] = $attrs;

// loop through atts, logging ns and type declarations

$attstr = '';

foreach($attrs as $key => $value){

Page 707: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

551

$key_prefix = $this->getPrefix($key);

$key_localpart = $this->getLocalPart($key);

// if ns declarations, add to class level array of valid

namespaces

if($key_prefix == 'xmlns'){

if(preg_match('/^http:\/\/www.w3.org\/[0-9]

{4}\/XMLSchema$/',$value)){

$this->XMLSchemaVersion = $value;

$this->namespaces['xsd'] = $this-

>XMLSchemaVersion;

$this->namespaces['xsi'] = $this-

>XMLSchemaVersion.'-instance';

}

$this->namespaces[$key_localpart] = $value;

// set method namespace

if($name == $this->root_struct_name){

$this->methodNamespace = $value;

}

// if it's a type declaration, set type

} elseif($key_localpart == 'type'){

if (isset($this->message[$pos]['type']) && $this->message[$pos]

['type'] == 'array') {

Page 708: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

552

// do nothing: already processed arrayType

} else {

$value_prefix = $this->getPrefix($value);

$value_localpart = $this->getLocalPart($value);

$this->message[$pos]['type'] = $value_localpart;

$this->message[$pos]['typePrefix'] =

$value_prefix;

if(isset($this->namespaces[$value_prefix])){

$this->message[$pos]['type_namespace'] = $this-

>namespaces[$value_prefix];

} else if(isset($attrs['xmlns:'.$value_prefix])) {

$this->message[$pos]['type_namespace']

= $attrs['xmlns:'.$value_prefix];

}

// should do something here with the namespace

of specified type?

}

} elseif($key_localpart == 'arrayType'){

$this->message[$pos]['type'] = 'array';

/* do arrayType ereg here

[1] arrayTypeValue ::= atype asize

Page 709: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

553

[2] atype ::= QName rank*

[3] rank ::= '[' (',')* ']'

[4] asize ::= '[' length~ ']'

[5] length ::= nextDimension* Digit+

[6] nextDimension ::= Digit+ ','

*/

$expr = '/([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\

[([0-9]+),?([0-9]*)\]/';

if(preg_match($expr,$value,$regs)){

$this->message[$pos]['typePrefix'] = $regs[1];

$this->message[$pos]['arrayTypePrefix'] =

$regs[1];

if (isset($this->namespaces[$regs[1]])) {

$this->message[$pos]['arrayTypeNamespace'] = $this-

>namespaces[$regs[1]];

} else if (isset($attrs['xmlns:'.$regs[1]])) {

$this->message[$pos]

['arrayTypeNamespace'] = $attrs['xmlns:'.$regs[1]];

}

$this->message[$pos]['arrayType'] = $regs[2];

$this->message[$pos]['arraySize'] = $regs[3];

Page 710: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

554

$this->message[$pos]['arrayCols'] = $regs[4];

}

// specifies nil value (or not)

} elseif ($key_localpart == 'nil'){

$this->message[$pos]['nil'] = ($value == 'true' || $value

== '1');

// some other attribute

} elseif ($key != 'href' && $key != 'xmlns' && $key_localpart !

= 'encodingStyle' && $key_localpart != 'root') {

$this->message[$pos]['xattrs']['!' . $key] = $value;

}

if ($key == 'xmlns') {

$this->default_namespace = $value;

}

// log id

if($key == 'id'){

$this->ids[$value] = $pos;

}

// root

if($key_localpart == 'root' && $value == 1){

$this->status = 'method';

Page 711: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

555

$this->root_struct_name = $name;

$this->root_struct = $pos;

$this->debug("found root struct $this-

>root_struct_name, pos $pos");

}

// for doclit

$attstr .= " $key=\"$value\"";

}

// get namespace - must be done after namespace atts are processed

if(isset($prefix)){

$this->message[$pos]['namespace'] = $this-

>namespaces[$prefix];

$this->default_namespace = $this->namespaces[$prefix];

} else {

$this->message[$pos]['namespace'] = $this-

>default_namespace;

}

if($this->status == 'header'){

if ($this->root_header != $pos) {

$this->responseHeaders .= "<" . (isset($prefix) ? $prefix . ':' : '') .

"$name$attstr>";

Page 712: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

556

}

} elseif($this->root_struct_name != ''){

$this->document .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";

}

}

/**

* end-element handler

*

* @param resource $parser XML parser object

* @param string $name element name

* @access private

*/

function end_element($parser, $name) {

// position of current element is equal to the last value left in

depth_array for my depth

$pos = $this->depth_array[$this->depth--];

// get element prefix

if(strpos($name,':')){

Page 713: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

557

// get ns prefix

$prefix = substr($name,0,strpos($name,':'));

// get unqualified name

$name = substr(strstr($name,':'),1);

}

// build to native type

if(isset($this->body_position) && $pos > $this->body_position){

// deal w/ multirefs

if(isset($this->message[$pos]['attrs']['href'])){

// get id

$id = substr($this->message[$pos]['attrs']['href'],1);

// add placeholder to href array

$this->multirefs[$id][$pos] = 'placeholder';

// add set a reference to it as the result value

$this->message[$pos]['result'] =& $this->multirefs[$id]

[$pos];

// build complexType values

} elseif($this->message[$pos]['children'] != ''){

// if result has already been generated (struct/array)

Page 714: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

558

if(!isset($this->message[$pos]['result'])){

$this->message[$pos]['result'] = $this-

>buildVal($pos);

}

// build complexType values of attributes and possibly

simpleContent

} elseif (isset($this->message[$pos]['xattrs'])) {

if (isset($this->message[$pos]['nil']) && $this-

>message[$pos]['nil']) {

$this->message[$pos]['xattrs']['!'] = null;

} elseif (isset($this->message[$pos]['cdata']) &&

trim($this->message[$pos]['cdata']) != '') {

if (isset($this->message[$pos]['type'])) {

$this->message[$pos]['xattrs']['!'] = $this-

>decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'],

isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]

['type_namespace'] : '');

} else {

$parent = $this->message[$pos]['parent'];

if (isset($this->message[$parent]['type'])

&& ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]

['arrayType'])) {

Page 715: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

559

$this->message[$pos]['xattrs']['!']

= $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]

['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this-

>message[$parent]['arrayTypeNamespace'] : '');

} else {

$this->message[$pos]['xattrs']['!']

= $this->message[$pos]['cdata'];

}

}

}

$this->message[$pos]['result'] = $this->message[$pos]

['xattrs'];

// set value of simpleType (or nil complexType)

} else {

//$this->debug('adding data for scalar value '.$this->message[$pos]

['name'].' of value '.$this->message[$pos]['cdata']);

if (isset($this->message[$pos]['nil']) && $this-

>message[$pos]['nil']) {

$this->message[$pos]['xattrs']['!'] = null;

} elseif (isset($this->message[$pos]['type'])) {

$this->message[$pos]['result'] = $this-

>decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'],

Page 716: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

560

isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]

['type_namespace'] : '');

} else {

$parent = $this->message[$pos]['parent'];

if (isset($this->message[$parent]['type']) &&

($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]

['arrayType'])) {

$this->message[$pos]['result'] = $this-

>decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'],

isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]

['arrayTypeNamespace'] : '');

} else {

$this->message[$pos]['result'] = $this-

>message[$pos]['cdata'];

}

}

/* add value to parent's result, if parent is struct/array

$parent = $this->message[$pos]['parent'];

if($this->message[$parent]['type'] != 'map'){

if(strtolower($this->message[$parent]['type']) ==

'array'){

Page 717: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

561

$this->message[$parent]['result'][] =

$this->message[$pos]['result'];

} else {

$this->message[$parent]['result'][$this-

>message[$pos]['name']] = $this->message[$pos]['result'];

}

}

*/

}

}

// for doclit

if($this->status == 'header'){

if ($this->root_header != $pos) {

$this->responseHeaders .= "</" . (isset($prefix) ? $prefix . ':' : '') .

"$name>";

}

} elseif($pos >= $this->root_struct){

$this->document .= "</" . (isset($prefix) ? $prefix . ':' : '') . "$name>";

}

// switch status

Page 718: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

562

if ($pos == $this->root_struct){

$this->status = 'body';

$this->root_struct_namespace = $this->message[$pos]

['namespace'];

} elseif ($pos == $this->root_header) {

$this->status = 'envelope';

} elseif ($name == 'Body' && $this->status == 'body') {

$this->status = 'envelope';

} elseif ($name == 'Header' && $this->status == 'header') { // will

never happen

$this->status = 'envelope';

} elseif ($name == 'Envelope' && $this->status == 'envelope') {

$this->status = '';

}

// set parent back to my parent

$this->parent = $this->message[$pos]['parent'];

}

/**

* element content handler

*

Page 719: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

563

* @param resource $parser XML parser object

* @param string $data element content

* @access private

*/

function character_data($parser, $data){

$pos = $this->depth_array[$this->depth];

if ($this->xml_encoding=='UTF-8'){

// TODO: add an option to disable this for folks who want

// raw UTF-8 that, e.g., might not map to iso-8859-1

// TODO: this can also be handled with

xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING,

"ISO-8859-1");

if($this->decode_utf8){

$data = utf8_decode($data);

}

}

$this->message[$pos]['cdata'] .= $data;

// for doclit

if($this->status == 'header'){

$this->responseHeaders .= $data;

} else {

Page 720: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

564

$this->document .= $data;

}

}

/**

* get the parsed message (SOAP Body)

*

* @return mixed

* @access public

* @deprecated use get_soapbody instead

*/

function get_response(){

return $this->soapresponse;

}

/**

* get the parsed SOAP Body (NULL if there was none)

*

* @return mixed

* @access public

*/

Page 721: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

565

function get_soapbody(){

return $this->soapresponse;

}

/**

* get the parsed SOAP Header (NULL if there was none)

*

* @return mixed

* @access public

*/

function get_soapheader(){

return $this->soapheader;

}

/**

* get the unparsed SOAP Header

*

* @return string XML or empty if no Header

* @access public

*/

function getHeaders(){

return $this->responseHeaders;

Page 722: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

566

}

/**

* decodes simple types into PHP variables

*

* @param string $value value to decode

* @param string $type XML type to decode

* @param string $typens XML type namespace to decode

* @return mixed PHP value

* @access private

*/

function decodeSimple($value, $type, $typens) {

// TODO: use the namespace!

if ((!isset($type)) || $type == 'string' || $type == 'long' || $type ==

'unsignedLong') {

return (string) $value;

}

if ($type == 'int' || $type == 'integer' || $type == 'short' || $type ==

'byte') {

return (int) $value;

}

if ($type == 'float' || $type == 'double' || $type == 'decimal') {

Page 723: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

567

return (double) $value;

}

if ($type == 'boolean') {

if (strtolower($value) == 'false' || strtolower($value) == 'f') {

return false;

}

return (boolean) $value;

}

if ($type == 'base64' || $type == 'base64Binary') {

$this->debug('Decode base64 value');

return base64_decode($value);

}

// obscure numeric types

if ($type == 'nonPositiveInteger' || $type == 'negativeInteger'

|| $type == 'nonNegativeInteger' || $type == 'positiveInteger'

|| $type == 'unsignedInt'

|| $type == 'unsignedShort' || $type == 'unsignedByte') {

return (int) $value;

}

// bogus: parser treats array with no elements as a simple type

Page 724: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

568

if ($type == 'array') {

return array();

}

// everything else

return (string) $value;

}

/**

* builds response structures for compound values (arrays/structs)

* and scalars

*

* @param integer $pos position in node tree

* @return mixed PHP value

* @access private

*/

function buildVal($pos){

if(!isset($this->message[$pos]['type'])){

$this->message[$pos]['type'] = '';

}

Page 725: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

569

$this->debug('in buildVal() for '.$this->message[$pos]['name']."(pos

$pos) of type ".$this->message[$pos]['type']);

// if there are children...

if($this->message[$pos]['children'] != ''){

$this->debug('in buildVal, there are children');

$children = explode('|',$this->message[$pos]['children']);

array_shift($children); // knock off empty

// md array

if(isset($this->message[$pos]['arrayCols']) && $this-

>message[$pos]['arrayCols'] != ''){

$r=0; // rowcount

$c=0; // colcount

foreach($children as $child_pos){

$this->debug("in buildVal, got an MD array

element: $r, $c");

$params[$r][] = $this->message[$child_pos]

['result'];

$c++;

if($c == $this->message[$pos]['arrayCols']){

$c = 0;

$r++;

Page 726: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

570

}

}

// array

} elseif($this->message[$pos]['type'] == 'array' || $this-

>message[$pos]['type'] == 'Array'){

$this->debug('in buildVal, adding array '.$this->message[$pos]['name']);

foreach($children as $child_pos){

$params[] = &$this->message[$child_pos]['result'];

}

// apache Map type: java hashtable

} elseif($this->message[$pos]['type'] == 'Map' && $this->message[$pos]

['type_namespace'] == 'http://xml.apache.org/xml-soap'){

$this->debug('in buildVal, Java Map '.$this->message[$pos]['name']);

foreach($children as $child_pos){

$kv = explode("|",$this->message[$child_pos]['children']);

$params[$this->message[$kv[1]]['result']] = &$this->message[$kv[2]]

['result'];

}

// generic compound type

//} elseif($this->message[$pos]['type'] == 'SOAPStruct' || $this-

>message[$pos]['type'] == 'struct') {

Page 727: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

571

} else {

// Apache Vector type: treat as an array

$this->debug('in buildVal, adding Java Vector or generic compound type '.

$this->message[$pos]['name']);

if ($this->message[$pos]['type'] == 'Vector' && $this-

>message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap') {

$notstruct = 1;

} else {

$notstruct = 0;

}

//

foreach($children as $child_pos){

if($notstruct){

$params[] = &$this->message[$child_pos]['result'];

} else {

if (isset($params[$this->message[$child_pos]['name']]))

{

// de-serialize repeated element name into an

array

if ((!is_array($params[$this-

>message[$child_pos]['name']])) || (!isset($params[$this->message[$child_pos]

['name']][0]))) {

Page 728: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

572

$params[$this->message[$child_pos]

['name']] = array($params[$this->message[$child_pos]['name']]);

}

$params[$this->message[$child_pos]['name']][]

= &$this->message[$child_pos]['result'];

} else {

$params[$this->message[$child_pos]

['name']] = &$this->message[$child_pos]['result'];

}

}

}

}

if (isset($this->message[$pos]['xattrs'])) {

$this->debug('in buildVal, handling attributes');

foreach ($this->message[$pos]['xattrs'] as $n => $v) {

$params[$n] = $v;

}

}

// handle simpleContent

if (isset($this->message[$pos]['cdata']) && trim($this-

>message[$pos]['cdata']) != '') {

Page 729: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

573

$this->debug('in buildVal, handling simpleContent');

if (isset($this->message[$pos]['type'])) {

$params['!'] = $this->decodeSimple($this-

>message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]

['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');

} else {

$parent = $this->message[$pos]['parent'];

if (isset($this->message[$parent]['type']) &&

($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]

['arrayType'])) {

$params['!'] = $this-

>decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'],

isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]

['arrayTypeNamespace'] : '');

} else {

$params['!'] = $this->message[$pos]

['cdata'];

}

}

}

$ret = is_array($params) ? $params : array();

$this->debug('in buildVal, return:');

$this->appendDebug($this->varDump($ret));

Page 730: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

574

return $ret;

} else {

$this->debug('in buildVal, no children, building scalar');

$cdata = isset($this->message[$pos]['cdata']) ? $this-

>message[$pos]['cdata'] : '';

if (isset($this->message[$pos]['type'])) {

$ret = $this->decodeSimple($cdata, $this-

>message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this-

>message[$pos]['type_namespace'] : '');

$this->debug("in buildVal, return: $ret");

return $ret;

}

$parent = $this->message[$pos]['parent'];

if (isset($this->message[$parent]['type']) && ($this-

>message[$parent]['type'] == 'array') && isset($this->message[$parent]

['arrayType'])) {

$ret = $this->decodeSimple($cdata, $this-

>message[$parent]['arrayType'], isset($this->message[$parent]

['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');

$this->debug("in buildVal, return: $ret");

return $ret;

}

Page 731: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

575

$ret = $this->message[$pos]['cdata'];

$this->debug("in buildVal, return: $ret");

return $ret;

}

}

}

/**

* Backward compatibility

*/

class soap_parser extends nusoap_parser {

}

?><?php

/**

*

* [nu]soapclient higher level class for easy usage.

Page 732: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

576

*

* usage:

*

* // instantiate client with server info

* $soapclient = new nusoap_client( string path [ ,mixed wsdl] );

*

* // call method, get results

* echo $soapclient->call( string methodname [ ,array parameters] );

*

* // bye bye client

* unset($soapclient);

*

* @author Dietrich Ayala <[email protected]>

* @author Scott Nichol <[email protected]>

* @version $Id: nusoap.php,v 1.123 2010/04/26 20:15:08 snichol Exp $

* @access public

*/

class nusoap_client extends nusoap_base {

Page 733: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

577

var $username = ''; // Username for HTTP

authentication

var $password = ''; // Password for HTTP

authentication

var $authtype = ''; // Type of HTTP authentication

var $certRequest = array(); // Certificate for HTTP SSL

authentication

var $requestHeaders = false; // SOAP headers in request (text)

var $responseHeaders = ''; // SOAP headers from response

(incomplete namespace resolution) (text)

var $responseHeader = NULL; // SOAP Header from response

(parsed)

var $document = ''; // SOAP body response portion

(incomplete namespace resolution) (text)

var $endpoint;

var $forceEndpoint = ''; // overrides WSDL endpoint

var $proxyhost = '';

var $proxyport = '';

var $proxyusername = '';

var $proxypassword = '';

var $portName = ''; // port name to use in WSDL

Page 734: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

578

var $xml_encoding = ''; // character set encoding of incoming

(response) messages

var $http_encoding = false;

var $timeout = 0; // HTTP connection timeout

var $response_timeout = 30; // HTTP response timeout

var $endpointType = ''; // soap|wsdl, empty for WSDL

initialization error

var $persistentConnection = false;

var $defaultRpcParams = false; // This is no longer used

var $request = ''; // HTTP request

var $response = ''; // HTTP response

var $responseData = ''; // SOAP payload of response

var $cookies = array(); // Cookies from response or for

request

var $decode_utf8 = true; // toggles whether the parser decodes element

content w/ utf8_decode()

var $operations = array(); // WSDL operations, empty for WSDL

initialization error

var $curl_options = array(); // User-specified cURL options

var $bindingType = ''; // WSDL operation binding type

var $use_curl = false; // whether to always try to use cURL

Page 735: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

579

/*

* fault related variables

*/

/**

* @var fault

* @access public

*/

var $fault;

/**

* @var faultcode

* @access public

*/

var $faultcode;

/**

* @var faultstring

* @access public

*/

var $faultstring;

/**

* @var faultdetail

Page 736: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

580

* @access public

*/

var $faultdetail;

/**

* constructor

*

* @param mixed $endpoint SOAP server or WSDL URL (string), or wsdl

instance (object)

* @param mixed $wsdl optional, set to 'wsdl' or true if using WSDL

* @param string $proxyhost optional

* @param string $proxyport optional

* @param string $proxyusername optional

* @param string $proxypassword optional

* @param integer $timeout set the connection timeout

* @param integer $response_timeout set the response timeout

* @param string $portName optional portName in WSDL document

* @access public

*/

Page 737: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

581

function nusoap_client($endpoint,$wsdl = false,$proxyhost = false,$proxyport

= false,$proxyusername = false, $proxypassword = false, $timeout = 0,

$response_timeout = 30, $portName = ''){

parent::nusoap_base();

$this->endpoint = $endpoint;

$this->proxyhost = $proxyhost;

$this->proxyport = $proxyport;

$this->proxyusername = $proxyusername;

$this->proxypassword = $proxypassword;

$this->timeout = $timeout;

$this->response_timeout = $response_timeout;

$this->portName = $portName;

$this->debug("ctor wsdl=$wsdl timeout=$timeout

response_timeout=$response_timeout");

$this->appendDebug('endpoint=' . $this->varDump($endpoint));

// make values

if($wsdl){

if (is_object($endpoint) && (get_class($endpoint) == 'wsdl')) {

$this->wsdl = $endpoint;

Page 738: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

582

$this->endpoint = $this->wsdl->wsdl;

$this->wsdlFile = $this->endpoint;

$this->debug('existing wsdl instance created from ' .

$this->endpoint);

$this->checkWSDL();

} else {

$this->wsdlFile = $this->endpoint;

$this->wsdl = null;

$this->debug('will use lazy evaluation of wsdl from ' .

$this->endpoint);

}

$this->endpointType = 'wsdl';

} else {

$this->debug("instantiate SOAP with endpoint at $endpoint");

$this->endpointType = 'soap';

}

}

/**

* calls method, returns PHP native type

*

* @param string $operation SOAP server URL or path

Page 739: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

583

* @param mixed $params An array, associative or simple, of the parameters

* for the method call, or a string that is the XML

* for the call. For rpc style, this call will

* wrap the XML in a tag named after the method,

as

* well as the SOAP Envelope and Body. For

document

* style, this will only wrap with the Envelope and

Body.

* IMPORTANT: when using an array with

document style,

* in which case there

* is really one parameter, the root of the fragment

* used in the call, which encloses what programmers

* normally think of parameters. A parameter array

* *must* include the wrapper.

* @param string $namespace optional method namespace (WSDL can

override)

* @param string $soapAction optional SOAPAction value (WSDL can

override)

* @param mixed $headers optional string of XML with SOAP header

content, or array of soapval objects for SOAP headers, or associative array

Page 740: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

584

* @param boolean $rpcParams optional (no longer used)

* @param string $style optional (rpc|document) the style to use when

serializing parameters (WSDL can override)

* @param string $use optional (encoded|literal) the use when serializing

parameters (WSDL can override)

* @return mixed response from SOAP call, normally an associative array

mirroring the structure of the XML response, false for certain fatal errors

* @access public

*/

function call($operation,$params=array(),$namespace='http://tempuri.org',

$soapAction='',$headers=false,$rpcParams=null,$style='rpc',$use='encoded'){

$this->operation = $operation;

$this->fault = false;

$this->setError('');

$this->request = '';

$this->response = '';

$this->responseData = '';

$this->faultstring = '';

$this->faultcode = '';

$this->opData = array();

Page 741: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

585

$this->debug("call: operation=$operation, namespace=$namespace,

soapAction=$soapAction, rpcParams=$rpcParams, style=$style, use=$use,

endpointType=$this->endpointType");

$this->appendDebug('params=' . $this->varDump($params));

$this->appendDebug('headers=' . $this->varDump($headers));

if ($headers) {

$this->requestHeaders = $headers;

}

if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {

$this->loadWSDL();

if ($this->getError())

return false;

}

// serialize parameters

if($this->endpointType == 'wsdl' && $opData = $this-

>getOperationData($operation)){

// use WSDL for operation

$this->opData = $opData;

$this->debug("found operation");

$this->appendDebug('opData=' . $this->varDump($opData));

if (isset($opData['soapAction'])) {

Page 742: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

586

$soapAction = $opData['soapAction'];

}

if (! $this->forceEndpoint) {

$this->endpoint = $opData['endpoint'];

} else {

$this->endpoint = $this->forceEndpoint;

}

$namespace = isset($opData['input']['namespace']) ?

$opData['input']['namespace'] : $namespace;

$style = $opData['style'];

$use = $opData['input']['use'];

// add ns to ns array

if($namespace != '' && !isset($this->wsdl-

>namespaces[$namespace])){

$nsPrefix = 'ns' . rand(1000, 9999);

$this->wsdl->namespaces[$nsPrefix] = $namespace;

}

$nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);

// serialize payload

if (is_string($params)) {

Page 743: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

587

$this->debug("serializing param string for WSDL

operation $operation");

$payload = $params;

} elseif (is_array($params)) {

$this->debug("serializing param array for WSDL

operation $operation");

$payload = $this->wsdl-

>serializeRPCParameters($operation,'input',$params,$this->bindingType);

} else {

$this->debug('params must be array or string');

$this->setError('params must be array or string');

return false;

}

$usedNamespaces = $this->wsdl->usedNamespaces;

if (isset($opData['input']['encodingStyle'])) {

$encodingStyle = $opData['input']['encodingStyle'];

} else {

$encodingStyle = '';

}

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

Page 744: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

588

if ($errstr = $this->wsdl->getError()) {

$this->debug('got wsdl error: '.$errstr);

$this->setError('wsdl error: '.$errstr);

return false;

}

} elseif($this->endpointType == 'wsdl') {

// operation not in WSDL

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

$this->setError('operation '.$operation.' not present in WSDL.');

$this->debug("operation '$operation' not present in WSDL.");

return false;

} else {

// no WSDL

//$this->namespaces['ns1'] = $namespace;

$nsPrefix = 'ns' . rand(1000, 9999);

// serialize

$payload = '';

if (is_string($params)) {

Page 745: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

589

$this->debug("serializing param string for operation

$operation");

$payload = $params;

} elseif (is_array($params)) {

$this->debug("serializing param array for operation

$operation");

foreach($params as $k => $v){

$payload .= $this->serialize_val($v,

$k,false,false,false,false,$use);

}

} else {

$this->debug('params must be array or string');

$this->setError('params must be array or string');

return false;

}

$usedNamespaces = array();

if ($use == 'encoded') {

$encodingStyle =

'http://schemas.xmlsoap.org/soap/encoding/';

} else {

$encodingStyle = '';

Page 746: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

590

}

}

// wrap RPC calls with method element

if ($style == 'rpc') {

if ($use == 'literal') {

$this->debug("wrapping RPC request with literal

method element");

if ($namespace) {

// http://www.ws-i.org/Profiles/BasicProfile-1.1-

2004-08-24.html R2735 says rpc/literal accessor elements should not be in a

namespace

$payload = "<$nsPrefix:$operation xmlns:

$nsPrefix=\"$namespace\">" .

$payload .

"</$nsPrefix:$operation>";

} else {

$payload = "<$operation>" . $payload . "</

$operation>";

}

} else {

$this->debug("wrapping RPC request with encoded

method element");

Page 747: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

591

if ($namespace) {

$payload = "<$nsPrefix:$operation xmlns:

$nsPrefix=\"$namespace\">" .

$payload .

"</$nsPrefix:$operation>";

} else {

$payload = "<$operation>" .

$payload .

"</$operation>";

}

}

}

// serialize envelope

$soapmsg = $this->serializeEnvelope($payload,$this->requestHeaders,

$usedNamespaces,$style,$use,$encodingStyle);

$this->debug("endpoint=$this->endpoint, soapAction=$soapAction,

namespace=$namespace, style=$style, use=$use, encodingStyle=$encodingStyle");

$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents

(max 1000 bytes)=' . substr($soapmsg, 0, 1000));

// send

$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,

$this->timeout,$this->response_timeout);

Page 748: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

592

if($errstr = $this->getError()){

$this->debug('Error: '.$errstr);

return false;

} else {

$this->return = $return;

$this->debug('sent message successfully and got a(n)

'.gettype($return));

$this->appendDebug('return=' . $this->varDump($return));

// fault?

if(is_array($return) && isset($return['faultcode'])){

$this->debug('got fault');

$this->setError($return['faultcode'].': '.

$return['faultstring']);

$this->fault = true;

foreach($return as $k => $v){

$this->$k = $v;

$this->debug("$k = $v<br>");

}

return $return;

} elseif ($style == 'document') {

Page 749: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

593

// NOTE: if the response is defined to have multiple

parts (i.e. unwrapped),

// we are only going to return the first part here...sorry

about that

return $return;

} else {

// array of return values

if(is_array($return)){

// multiple 'out' parameters, which we return

wrapped up

// in the array

if(sizeof($return) > 1){

return $return;

}

// single 'out' parameter (normally the return

value)

$return = array_shift($return);

$this->debug('return shifted value: ');

$this->appendDebug($this->varDump($return));

return $return;

// nothing returned (ie, echoVoid)

Page 750: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

594

} else {

return "";

}

}

}

}

/**

* check WSDL passed as an instance or pulled from an endpoint

*

* @access private

*/

function checkWSDL() {

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

$this->debug('checkWSDL');

// catch errors

if ($errstr = $this->wsdl->getError()) {

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

Page 751: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

595

$this->debug('got wsdl error: '.$errstr);

$this->setError('wsdl error: '.$errstr);

} elseif ($this->operations = $this->wsdl->getOperations($this-

>portName, 'soap')) {

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

$this->bindingType = 'soap';

$this->debug('got '.count($this->operations).' operations from

wsdl '.$this->wsdlFile.' for binding type '.$this->bindingType);

} elseif ($this->operations = $this->wsdl->getOperations($this-

>portName, 'soap12')) {

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

$this->bindingType = 'soap12';

$this->debug('got '.count($this->operations).' operations from

wsdl '.$this->wsdlFile.' for binding type '.$this->bindingType);

$this->debug('**************** WARNING: SOAP 1.2

BINDING *****************');

} else {

$this->appendDebug($this->wsdl->getDebug());

$this->wsdl->clearDebug();

$this->debug('getOperations returned false');

Page 752: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

596

$this->setError('no operations defined in the WSDL

document!');

}

}

/**

* instantiate wsdl object and parse wsdl file

*

* @access public

*/

function loadWSDL() {

$this->debug('instantiating wsdl class with doc: '.$this->wsdlFile);

$this->wsdl = new wsdl('',$this->proxyhost,$this->proxyport,$this-

>proxyusername,$this->proxypassword,$this->timeout,$this->response_timeout,

$this->curl_options,$this->use_curl);

$this->wsdl->setCredentials($this->username, $this->password, $this-

>authtype, $this->certRequest);

$this->wsdl->fetchWSDL($this->wsdlFile);

$this->checkWSDL();

}

Page 753: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

597

/**

* get available data pertaining to an operation

*

* @param string $operation operation name

* @return array array of data pertaining to the operation

* @access public

*/

function getOperationData($operation){

if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {

$this->loadWSDL();

if ($this->getError())

return false;

}

if(isset($this->operations[$operation])){

return $this->operations[$operation];

}

$this->debug("No data for operation: $operation");

}

/**

* send the SOAP message

Page 754: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

598

*

* Note: if the operation has multiple return values

* the return value of this method will be an array

* of those values.

*

* @param string $msg a SOAPx4 soapmsg object

* @param string $soapaction SOAPAction value

* @param integer $timeout set connection timeout in seconds

* @param integer $response_timeout set response timeout in seconds

* @return mixed native PHP types.

* @access private

*/

function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) {

$this->checkCookies();

// detect transport

switch(true){

// http(s)

case preg_match('/^http/',$this->endpoint):

$this->debug('transporting via HTTP');

Page 755: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

599

if($this->persistentConnection == true &&

is_object($this->persistentConnection)){

$http =& $this->persistentConnection;

} else {

$http = new soap_transport_http($this-

>endpoint, $this->curl_options, $this->use_curl);

if ($this->persistentConnection) {

$http->usePersistentConnection();

}

}

$http->setContentType($this->getHTTPContentType(),

$this->getHTTPContentTypeCharset());

$http->setSOAPAction($soapaction);

if($this->proxyhost && $this->proxyport){

$http->setProxy($this->proxyhost,$this-

>proxyport,$this->proxyusername,$this->proxypassword);

}

if($this->authtype != '') {

$http->setCredentials($this->username, $this-

>password, $this->authtype, array(), $this->certRequest);

}

if($this->http_encoding != ''){

Page 756: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

600

$http->setEncoding($this->http_encoding);

}

$this->debug('sending message, length='.strlen($msg));

if(preg_match('/^http:/',$this->endpoint)){

//if(strpos($this->endpoint,'http:')){

$this->responseData = $http->send($msg,

$timeout,$response_timeout,$this->cookies);

} elseif(preg_match('/^https/',$this->endpoint)){

//} elseif(strpos($this->endpoint,'https:')){

//if(phpversion() == '4.3.0-dev'){

//$response = $http->send($msg,

$timeout,$response_timeout);

//$this->request = $http->outgoing_payload;

//$this->response = $http-

>incoming_payload;

//} else

$this->responseData = $http-

>sendHTTPS($msg,$timeout,$response_timeout,$this->cookies);

} else {

$this->setError('no http/s in endpoint url');

}

Page 757: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

601

$this->request = $http->outgoing_payload;

$this->response = $http->incoming_payload;

$this->appendDebug($http->getDebug());

$this->UpdateCookies($http->incoming_cookies);

// save transport object if using persistent connections

if ($this->persistentConnection) {

$http->clearDebug();

if (!is_object($this->persistentConnection)) {

$this->persistentConnection = $http;

}

}

if($err = $http->getError()){

$this->setError('HTTP Error: '.$err);

return false;

} elseif($this->getError()){

return false;

} else {

Page 758: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

602

$this->debug('got response, length='.

strlen($this->responseData).' type='.$http->incoming_headers['content-type']);

return $this->parseResponse($http-

>incoming_headers, $this->responseData);

}

break;

default:

$this->setError('no transport found, or selected transport

is not yet supported!');

return false;

break;

}

}

/**

* processes SOAP message returned from server

*

* @param array $headers The HTTP headers

* @param string $data unprocessed response data from server

* @return mixed value of the message, decoded into a PHP type

* @access private

Page 759: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

603

*/

function parseResponse($headers, $data) {

$this->debug('Entering parseResponse() for data of length ' .

strlen($data) . ' headers:');

$this->appendDebug($this->varDump($headers));

if (!isset($headers['content-type'])) {

$this->setError('Response not of type text/xml (no content-type

header)');

return false;

}

if (!strstr($headers['content-type'], 'text/xml')) {

$this->setError('Response not of type text/xml: ' .

$headers['content-type']);

return false;

}

if (strpos($headers['content-type'], '=')) {

$enc = str_replace('"', '', substr(strstr($headers["content-type"],

'='), 1));

$this->debug('Got response encoding: ' . $enc);

if(preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i',$enc)){

$this->xml_encoding = strtoupper($enc);

Page 760: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

604

} else {

$this->xml_encoding = 'US-ASCII';

}

} else {

// should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP

1.1

$this->xml_encoding = 'ISO-8859-1';

}

$this->debug('Use encoding: ' . $this->xml_encoding . ' when creating

nusoap_parser');

$parser = new nusoap_parser($data,$this->xml_encoding,$this-

>operation,$this->decode_utf8);

// add parser debug data to our debug

$this->appendDebug($parser->getDebug());

// if parse errors

if($errstr = $parser->getError()){

$this->setError( $errstr);

// destroy the parser object

unset($parser);

return false;

} else {

Page 761: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

605

// get SOAP headers

$this->responseHeaders = $parser->getHeaders();

// get SOAP headers

$this->responseHeader = $parser->get_soapheader();

// get decoded message

$return = $parser->get_soapbody();

// add document for doclit support

$this->document = $parser->document;

// destroy the parser object

unset($parser);

// return decode message

return $return;

}

}

/**

* sets user-specified cURL options

*

* @param mixed $option The cURL option (always integer?)

* @param mixed $value The cURL option value

Page 762: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

606

* @access public

*/

function setCurlOption($option, $value) {

$this->debug("setCurlOption option=$option, value=");

$this->appendDebug($this->varDump($value));

$this->curl_options[$option] = $value;

}

/**

* sets the SOAP endpoint, which can override WSDL

*

* @param string $endpoint The endpoint URL to use, or empty string or

false to prevent override

* @access public

*/

function setEndpoint($endpoint) {

$this->debug("setEndpoint(\"$endpoint\")");

$this->forceEndpoint = $endpoint;

}

Page 763: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

607

/**

* set the SOAP headers

*

* @param mixed $headers String of XML with SOAP header content, or

array of soapval objects for SOAP headers

* @access public

*/

function setHeaders($headers){

$this->debug("setHeaders headers=");

$this->appendDebug($this->varDump($headers));

$this->requestHeaders = $headers;

}

/**

* get the SOAP response headers (namespace resolution incomplete)

*

* @return string

* @access public

*/

function getHeaders(){

Page 764: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

608

return $this->responseHeaders;

}

/**

* get the SOAP response Header (parsed)

*

* @return mixed

* @access public

*/

function getHeader(){

return $this->responseHeader;

}

/**

* set proxy info here

*

* @param string $proxyhost

* @param string $proxyport

* @param string $proxyusername

* @param string $proxypassword

Page 765: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

609

* @access public

*/

function setHTTPProxy($proxyhost, $proxyport, $proxyusername = '',

$proxypassword = '') {

$this->proxyhost = $proxyhost;

$this->proxyport = $proxyport;

$this->proxyusername = $proxyusername;

$this->proxypassword = $proxypassword;

}

/**

* if authenticating, set user credentials here

*

* @param string $username

* @param string $password

* @param string $authtype (basic|digest|certificate|ntlm)

* @param array $certRequest (keys must be cainfofile (optional),

sslcertfile, sslkeyfile, passphrase, verifypeer (optional), verifyhost (optional): see

corresponding options in cURL docs)

* @access public

*/

Page 766: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

610

function setCredentials($username, $password, $authtype = 'basic',

$certRequest = array()) {

$this->debug("setCredentials username=$username

authtype=$authtype certRequest=");

$this->appendDebug($this->varDump($certRequest));

$this->username = $username;

$this->password = $password;

$this->authtype = $authtype;

$this->certRequest = $certRequest;

}

/**

* use HTTP encoding

*

* @param string $enc HTTP encoding

* @access public

*/

function setHTTPEncoding($enc='gzip, deflate'){

$this->debug("setHTTPEncoding(\"$enc\")");

$this->http_encoding = $enc;

}

Page 767: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

611

/**

* Set whether to try to use cURL connections if possible

*

* @param boolean $use Whether to try to use cURL

* @access public

*/

function setUseCURL($use) {

$this->debug("setUseCURL($use)");

$this->use_curl = $use;

}

/**

* use HTTP persistent connections if possible

*

* @access public

*/

function useHTTPPersistentConnection(){

$this->debug("useHTTPPersistentConnection");

$this->persistentConnection = true;

Page 768: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

612

}

/**

* gets the default RPC parameter setting.

* If true, default is that call params are like RPC even for document style.

* Each call() can override this value.

*

* This is no longer used.

*

* @return boolean

* @access public

* @deprecated

*/

function getDefaultRpcParams() {

return $this->defaultRpcParams;

}

/**

* sets the default RPC parameter setting.

* If true, default is that call params are like RPC even for document style

Page 769: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

613

* Each call() can override this value.

*

* This is no longer used.

*

* @param boolean $rpcParams

* @access public

* @deprecated

*/

function setDefaultRpcParams($rpcParams) {

$this->defaultRpcParams = $rpcParams;

}

/**

* dynamically creates an instance of a proxy class,

* allowing user to directly call methods from wsdl

*

* @return object soap_proxy object

* @access public

*/

function getProxy() {

Page 770: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

614

$r = rand();

$evalStr = $this->_getProxyClassCode($r);

//$this->debug("proxy class: $evalStr");

if ($this->getError()) {

$this->debug("Error from _getProxyClassCode, so return

NULL");

return null;

}

// eval the class

eval($evalStr);

// instantiate proxy object

eval("\$proxy = new nusoap_proxy_$r('');");

// transfer current wsdl data to the proxy thereby avoiding parsing the

wsdl twice

$proxy->endpointType = 'wsdl';

$proxy->wsdlFile = $this->wsdlFile;

$proxy->wsdl = $this->wsdl;

$proxy->operations = $this->operations;

$proxy->defaultRpcParams = $this->defaultRpcParams;

// transfer other state

$proxy->soap_defencoding = $this->soap_defencoding;

Page 771: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

615

$proxy->username = $this->username;

$proxy->password = $this->password;

$proxy->authtype = $this->authtype;

$proxy->certRequest = $this->certRequest;

$proxy->requestHeaders = $this->requestHeaders;

$proxy->endpoint = $this->endpoint;

$proxy->forceEndpoint = $this->forceEndpoint;

$proxy->proxyhost = $this->proxyhost;

$proxy->proxyport = $this->proxyport;

$proxy->proxyusername = $this->proxyusername;

$proxy->proxypassword = $this->proxypassword;

$proxy->http_encoding = $this->http_encoding;

$proxy->timeout = $this->timeout;

$proxy->response_timeout = $this->response_timeout;

$proxy->persistentConnection = &$this->persistentConnection;

$proxy->decode_utf8 = $this->decode_utf8;

$proxy->curl_options = $this->curl_options;

$proxy->bindingType = $this->bindingType;

$proxy->use_curl = $this->use_curl;

return $proxy;

Page 772: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

616

}

/**

* dynamically creates proxy class code

*

* @return string PHP/NuSOAP code for the proxy class

* @access private

*/

function _getProxyClassCode($r) {

$this->debug("in getProxy endpointType=$this->endpointType");

$this->appendDebug("wsdl=" . $this->varDump($this->wsdl));

if ($this->endpointType != 'wsdl') {

$evalStr = 'A proxy can only be created for a WSDL client';

$this->setError($evalStr);

$evalStr = "echo \"$evalStr\";";

return $evalStr;

}

if ($this->endpointType == 'wsdl' && is_null($this->wsdl)) {

$this->loadWSDL();

if ($this->getError()) {

Page 773: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

617

return "echo \"" . $this->getError() . "\";";

}

}

$evalStr = '';

foreach ($this->operations as $operation => $opData) {

if ($operation != '') {

// create param string and param comment string

if (sizeof($opData['input']['parts']) > 0) {

$paramStr = '';

$paramArrayStr = '';

$paramCommentStr = '';

foreach ($opData['input']['parts'] as $name =>

$type) {

$paramStr .= "\$$name, ";

$paramArrayStr .= "'$name' => \$$name,

";

$paramCommentStr .= "$type \$$name,

";

}

$paramStr = substr($paramStr, 0,

strlen($paramStr)-2);

Page 774: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

618

$paramArrayStr = substr($paramArrayStr, 0,

strlen($paramArrayStr)-2);

$paramCommentStr =

substr($paramCommentStr, 0, strlen($paramCommentStr)-2);

} else {

$paramStr = '';

$paramArrayStr = '';

$paramCommentStr = 'void';

}

$opData['namespace'] = !isset($opData['namespace']) ?

'http://testuri.com' : $opData['namespace'];

$evalStr .= "// $paramCommentStr

function " . str_replace('.', '__', $operation) . "($paramStr) {

\$params = array($paramArrayStr);

return \$this->call('$operation', \$params, '".$opData['namespace']."',

'".(isset($opData['soapAction']) ? $opData['soapAction'] : '')."');

}

";

unset($paramStr);

unset($paramCommentStr);

}

Page 775: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

619

}

$evalStr = 'class nusoap_proxy_'.$r.' extends nusoap_client {

'.$evalStr.'

}';

return $evalStr;

}

/**

* dynamically creates proxy class code

*

* @return string PHP/NuSOAP code for the proxy class

* @access public

*/

function getProxyClassCode() {

$r = rand();

return $this->_getProxyClassCode($r);

}

/**

* gets the HTTP body for the current request.

Page 776: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

620

*

* @param string $soapmsg The SOAP payload

* @return string The HTTP body, which includes the SOAP payload

* @access private

*/

function getHTTPBody($soapmsg) {

return $soapmsg;

}

/**

* gets the HTTP content type for the current request.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type for the current request.

* @access private

*/

function getHTTPContentType() {

return 'text/xml';

}

Page 777: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

621

/**

* gets the HTTP content type charset for the current request.

* returns false for non-text content types.

*

* Note: getHTTPBody must be called before this.

*

* @return string the HTTP content type charset for the current request.

* @access private

*/

function getHTTPContentTypeCharset() {

return $this->soap_defencoding;

}

/*

* whether or not parser should decode utf8 element content

*

* @return always returns true

* @access public

*/

Page 778: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

622

function decodeUTF8($bool){

$this->decode_utf8 = $bool;

return true;

}

/**

* adds a new Cookie into $this->cookies array

*

* @param string $name Cookie Name

* @param string $value Cookie Value

* @return boolean if cookie-set was successful returns true, else false

* @access public

*/

function setCookie($name, $value) {

if (strlen($name) == 0) {

return false;

}

$this->cookies[] = array('name' => $name, 'value' => $value);

return true;

}

Page 779: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

623

/**

* gets all Cookies

*

* @return array with all internal cookies

* @access public

*/

function getCookies() {

return $this->cookies;

}

/**

* checks all Cookies and delete those which are expired

*

* @return boolean always return true

* @access private

*/

function checkCookies() {

if (sizeof($this->cookies) == 0) {

return true;

Page 780: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

624

}

$this->debug('checkCookie: check ' . sizeof($this->cookies) . '

cookies');

$curr_cookies = $this->cookies;

$this->cookies = array();

foreach ($curr_cookies as $cookie) {

if (! is_array($cookie)) {

$this->debug('Remove cookie that is not an array');

continue;

}

if ((isset($cookie['expires'])) && (! empty($cookie['expires'])))

{

if (strtotime($cookie['expires']) > time()) {

$this->cookies[] = $cookie;

} else {

$this->debug('Remove expired cookie ' .

$cookie['name']);

}

} else {

$this->cookies[] = $cookie;

}

Page 781: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

625

}

$this->debug('checkCookie: '.sizeof($this->cookies).' cookies left in

array');

return true;

}

/**

* updates the current cookies with a new set

*

* @param array $cookies new cookies with which to update current ones

* @return boolean always return true

* @access private

*/

function UpdateCookies($cookies) {

if (sizeof($this->cookies) == 0) {

// no existing cookies: take whatever is new

if (sizeof($cookies) > 0) {

$this->debug('Setting new cookie(s)');

$this->cookies = $cookies;

}

Page 782: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

626

return true;

}

if (sizeof($cookies) == 0) {

// no new cookies: keep what we've got

return true;

}

// merge

foreach ($cookies as $newCookie) {

if (!is_array($newCookie)) {

continue;

}

if ((!isset($newCookie['name'])) || (!

isset($newCookie['value']))) {

continue;

}

$newName = $newCookie['name'];

$found = false;

for ($i = 0; $i < count($this->cookies); $i++) {

$cookie = $this->cookies[$i];

Page 783: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

627

if (!is_array($cookie)) {

continue;

}

if (!isset($cookie['name'])) {

continue;

}

if ($newName != $cookie['name']) {

continue;

}

$newDomain = isset($newCookie['domain']) ?

$newCookie['domain'] : 'NODOMAIN';

$domain = isset($cookie['domain']) ?

$cookie['domain'] : 'NODOMAIN';

if ($newDomain != $domain) {

continue;

}

$newPath = isset($newCookie['path']) ?

$newCookie['path'] : 'NOPATH';

$path = isset($cookie['path']) ? $cookie['path'] :

'NOPATH';

if ($newPath != $path) {

Page 784: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

628

continue;

}

$this->cookies[$i] = $newCookie;

$found = true;

$this->debug('Update cookie ' . $newName . '=' .

$newCookie['value']);

break;

}

if (! $found) {

$this->debug('Add cookie ' . $newName . '=' .

$newCookie['value']);

$this->cookies[] = $newCookie;

}

}

return true;

}

}

if (!extension_loaded('soap')) {

/**

Page 785: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

629

* For backwards compatiblity, define soapclient unless the PHP SOAP

extension is loaded.

*/

class soapclient extends nusoap_client {

}

}

?>

<?php

/*

incluye el archivo gapi.class.php que agrega el api para administracion de

trafico

*/

require_once 'gapi.class.php';

// usuario para se conecta

define('ga_web_email', '[email protected]');

// la clave de la cuenta

define('ga_web_pass', 'nando2');

// aqui el consultamos al servidor de google el trafico de nuestro que presente las

visitas que tenga

Page 786: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

630

$data =

get_analytics_data('59231567',array('date'),array('newVisits','visits'),'','2012-04-

29',date('Y-m-d'));

$reg=count($data['data']);

$r=$data['data'];

//consultamos al servidor de trafico el tipo de explorador y version

$data1 =

get_analytics_data('59231567',array('browser','browserVersion'),array('pageviews','vis

its'),'','2012-04-29',date('Y-m-d'));

//consultamos al servidor de trafico por la paginas mas visitas

$data2 =

get_analytics_data('59231567',array('pagePath'),array('visits'),'','2012-04-29',date('Y-

m-d'));

//print_r($data2);

function get_analytics_data(

$profile_id,

$dimensions=array('browser'),

$metrics=array('pageviews','visits','UniquePageviews'),

$sort=null,

$start_date=null,

Page 787: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

631

$end_date=null

){

$cache_id = md5(serialize(func_get_args()));

$return = false;

// check if the cache item exists.

$temp_folder = '/tmp/ga/';

if(!is_dir($temp_folder))mkdir($temp_folder);

$filename = $temp_folder.$cache_id;

if(is_file($filename)){ // if cache entry exists

if(filemtime($filename) > (time() - 172800)){ // check if it's older than 2 days

$return = unserialize(file_get_contents($filename)); // grab the cached content.

}

}

$ga = new gapi(ga_web_email,ga_web_pass);

if(!$sort)$sort = current($dimensions);

ini_set('display_errors',true);

$ga->requestReportData($profile_id,$dimensions,$metrics,

$sort,null,$start_date,$end_date,null,100);

$return = array();

Page 788: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

632

$return['data'] = array();

foreach($ga->getResults() as $result){

$data = array();

foreach($dimensions as $d){

$data[$d] = (string)$result;

foreach($metrics as $m){

$data[$m] = $result->{'get'.$m}();

}

}

$return['data'][] = $data;

}

$return['total'] = $ga->getTotalResults();

foreach($metrics as $m){

$return[$m] = $ga->{'get'.$m}();

}

$return['timestamp'] = $ga->getUpdated();

file_put_contents($filename,serialize($return));

return $return;

}

Page 789: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

633

?>

<table width="200" border="1" cellpadding="1" cellspacing="0"

bordercolor="#000000" align="center">

<tr>

<td>

<table width="478" border="0" bgcolor="#E9E9E9">

<tr>

<td width="472"><strong>VISITAS </strong></td>

</tr>

</table>

<table width="478" border="0" >

<tr>

<td width="161" bgcolor="#CCCCCC"><strong>Fecha </strong></td>

<td width="115" bgcolor="#CCCCCC"><strong>Nueva Visitas </strong></td>

<td width="188" bgcolor="#CCCCCC"><strong>Visitas</strong></td>

</tr>

<?php

// presenta los trafico segunda las visitas

$reg=count($data['data']);

Page 790: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

634

$r=$data['data'];

for($i=0;$i<$reg;$i++){

$fila=$r[$i];

?>

<tr>

<td><?php echo $fila['date']; ?></td>

<td><?php echo $fila['newVisits']; ?></td>

<td><?php echo $fila['visits']; ?></td>

</tr>

<?php

}

?>

</table>

&nbsp;</td>

</tr>

</table>

<table width="200" border="1" cellpadding="1" cellspacing="0"

bordercolor="#000000" align="center">

<tr>

Page 791: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

635

<td>

<table width="478" border="0" bgcolor="#E9E9E9">

<tr>

<td width="472"><strong>VISITAS POR NAVEGADOR </strong></td>

</tr>

</table>

<table width="478" border="0" >

<tr>

<td width="161" bgcolor="#CCCCCC"><strong>Navegador </strong></td>

<td width="115" bgcolor="#CCCCCC"><strong>Paginas Visitas </strong></td>

<td width="188" bgcolor="#CCCCCC"><strong>Visitas</strong></td>

</tr>

<?php

// presenta los trafico segun el navegador

$reg=count($data1['data']);

$r=$data1['data'];

for($i=0;$i<$reg;$i++){

$fila=$r[$i];

?>

<tr>

Page 792: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

636

<td><?php echo $fila['browser']; ?></td>

<td><?php echo $fila['pageviews']; ?></td>

<td><?php echo $fila['visits']; ?></td>

</tr>

<?php

}

?>

</table>

</td>

</tr>

</table>

<?php

include("grafico.php");

?>

<table width="200" border="1" cellpadding="1" cellspacing="0"

bordercolor="#000000" align="center">

<tr>

<td>

<table width="478" border="0" bgcolor="#E9E9E9">

<tr>

Page 793: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

637

<td width="472"><strong>PAGINAS VISITADAS </strong></td>

</tr>

</table>

<table width="478" border="0" >

<tr>

<td width="400" bgcolor="#CCCCCC"><strong>Pagina </strong></td>

<td width="78" bgcolor="#CCCCCC"><strong>Visitas</strong></td>

</tr>

<?php

// presenta los trafico segun las paginas visitas

$reg=count($data2['data']);

$r=$data2['data'];

for($i=0;$i<$reg;$i++){

$fila=$r[$i];

?>

<tr>

<td><?php echo $fila['pagePath']; ?></td>

<td><?php echo $fila['visits']; ?></td>

</tr>

Page 794: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

638

<?php

}

?>

</table>

</td>

</tr>

</table>

<?php

// Libreria para presentar grafico estadistico

include "function_dates.php"; include "googleanalytics.class.php";

$fecha2 = date('Y-m-d');

$fecha1 = strtotime ( '-15 day' , strtotime ( $fecha2 ) ) ;

$fecha1 = date ( 'Y-m-d' , $fecha1 );

$fechas = createDateRangeArray($fecha1,$fecha2);

$days = count($fechas);

try {

$ga = new GoogleAnalytics('[email protected]','nando2');

$ga->setProfile('ga:59231567');

$ga->setDateRange($fecha1,$fecha2);

Page 795: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

639

$report = $ga->getReport(

array('dimensions'=>urlencode('ga:date'),

'metrics'=>urlencode('ga:visits'),

null,

'sort'=>'ga:date'

)

);

$i = 0; $serie_dim = null; $serie_val = null;

foreach ($report as $valor){

$serie_dim .= "'".$fechas[$i]."', ";

$serie_val .= $valor['ga:visits'].", ";

$i++;

}

$serie_dim = substr($serie_dim, 0, -2); $serie_val = substr($serie_val, 0, -2);

//presenta grafico del trafico

Page 796: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

640

$script1 = "<script

type='text/javascript'src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.

js'></script><script type='text/javascript'>var chart;$(document).ready(function()

{chart=new Highcharts.Chart({chart:

{renderTo:'container',defaultSeriesType:'line',marginRight:130,marginBottom:25},titl

e:{text:'VISITAS POR DIA (Ultimos 15 dias)',x:-20},subtitle:{text:'Fuente: Google

Analytics',x:-20},xAxis:{categories:[".

$serie_dim.

"]},yAxis:{title:{text:'Visitas'},plotLines:

[{value:0,width:1,color:'#808080'}]},tooltip:{formatter:function()

{return'<b>'+this.series.name+'</b><br/>'+

this.x+': '+this.y+'';}},legend:{layout:'vertical',align:'right',verticalAlign:'top',x:-

10,y:100,borderWidth:0},series:[{name:'Visitas',data:[".

$serie_val.

"]}]});});</script><script

type='text/javascript'src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.

js'></script><script type='text/javascript'src='highcharts.js'></script><script

type='text/javascript'src='exporting.js'></script><div id='container'style='width:

600px; height: 400px; margin: 0 auto'></div>";

}catch (Exception $e) {

print 'Error: ' . $e->getMessage();

}

echo $script1;

Page 797: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

641

?>

<?php

// include the Google Analytics PHP class

include "googleanalytics.class.php";

try {

// create an instance of the GoogleAnalytics class using your own Google

{email} and {password}

$ga = new GoogleAnalytics('{email}','{password}');

// set the Google Analytics profile you want to access - format is 'ga:123456';

$ga->setProfile('{GA Profile ID}');

// set the date range we want for the report - format is YYYY-MM-DD

$ga->setDateRange('2009-04-01','2009-04-07');

// get the report for date and country filtered by Australia, showing pageviews

and visits

$report = $ga->getReport(

array('dimensions'=>urlencode('ga:date,ga:country'),

'metrics'=>urlencode('ga:pageviews,ga:visits'),

Page 798: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

642

'filters'=>urlencode('ga:country=@Australia'),

'sort'=>'-ga:pageviews'

)

);

//print out the $report array

print "<pre>";

print_r($report);

print "</pre>";

} catch (Exception $e) {

print 'Error: ' . $e->getMessage();

}

?>

?php

/**

* Google Analytics API Class

*

*

* This library is free software; you can redistribute it and/or

Page 799: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

643

* modify it under the terms of the GNU Lesser General Public

* License as published by the Free Software Foundation; either

* version 2.1 of the License, or (at your option) any later version.

*

* This library is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU

* Lesser General Public License for more details.

*

* You should have received a copy of the GNU Lesser General Public

* License along with this library; if not, write to the Free Software

* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

*

* Author: Doug Tan

* Website: http://www.askaboutphp.com/

* Version: 0.2

*/

class GoogleAnalytics {

Page 800: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

644

private $_email;

private $_passwd;

private $_authCode;

private $_profileId;

private $_endDate;

private $_startDate;

/**

* public constructor

*

* @param string $email

* @param string $passwd

* @return class

*/

public function __construct($email, $passwd) {

// set the email and password

$this->_email = $email;

$this->_passwd = $passwd;

Page 801: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

645

//default the start and end date

$this->_endDate = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") -

1, date("Y")));

$this->_startDate = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d")

- 31, date("Y")));

if (isset($this->_email) && isset($this->_passwd)) {

// autenticate the user

if (!$this->_authenticate()) {

//print $this->_authCode;

throw new Exception('Failed to authenticate, please

check your email and password.');

}

}

}

/**

* Sets Profile ID

*

* @param string $id (format: 'ga:1234')

Page 802: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

646

*/

public function setProfile($id) {

//look for a match for the pattern ga:XXXXXXXX, of up to 10 digits

if (!preg_match('/^ga:\d{1,10}/',$id)) {

throw new Exception('Invalid GA Profile ID set. The format

should ga:XXXXXX, where XXXXXX is your profile number');

}

$this->_profileId = $id;

return TRUE;

}

/**

* Sets the date range

*

* @param string $startDate (YYYY-MM-DD)

* @param string $endDate (YYYY-MM-DD)

*/

public function setDateRange($startDate, $endDate) {

//validate the dates

if (!preg_match('/\d{4}-\d{2}-\d{2}/', $startDate)) {

Page 803: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

647

throw new Exception('Format for start date is wrong, expecting

YYYY-MM-DD format');

}

if (!preg_match('/\d{4}-\d{2}-\d{2}/', $endDate)) {

throw new Exception('Format for end date is wrong, expecting

YYYY-MM-DD format');

}

if (strtotime($startDate)>strtotime($endDate)) {

throw new Exception('Invalid Date Range. Start Date is greated

than End Date');

}

$this->_startDate = $startDate;

$this->_endDate = $endDate;

return TRUE;

}

/**

* Retrieve the report according to the properties set in $properties

*

* @param array $properties

* @return array

Page 804: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

648

*/

public function getReport($properties = array()) {

if (!count($properties)) {

die ('getReport requires valid parameter to be passed');

return FALSE;

}

//arrange the properties in key-value pairing

foreach($properties as $key => $value){

$params[] = $key.'='.$value;

}

//compose the apiURL string

$apiUrl = 'https://www.google.com/analytics/feeds/data?ids='.$this-

>_profileId.'&start-date='.$this->_startDate.'&end-date='.$this-

>_endDate.'&'.implode('&', $params);

//call the API

$xml = $this->_callAPI($apiUrl);

//get the results

if ($xml) {

$dom = new DOMDocument();

Page 805: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

649

$dom->loadXML($xml);

$entries = $dom->getElementsByTagName('entry');

foreach ($entries as $entry){

$dimensions = $entry-

>getElementsByTagName('dimension');

foreach ($dimensions as $dimension) {

$dims .= $dimension->getAttribute('value').'~~';

}

$metrics = $entry->getElementsByTagName('metric');

foreach ($metrics as $metric) {

$name = $metric->getAttribute('name');

$mets[$name] = $metric->getAttribute('value');

}

$dims = trim($dims,'~~');

$results[$dims] = $mets;

$dims='';

$mets='';

Page 806: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

650

}

} else {

throw new Exception('getReport() failed to get a valid XML

from Google Analytics API service');

}

return $results;

}

/**

* Retrieve the list of Website Profiles according to your GA account

*

* @param none

* @return array

*/

public function getWebsiteProfiles() {

// make the call to the API

$response = $this-

>_callAPI('https://www.google.com/analytics/feeds/accounts/default');

//parse the response from the API using DOMDocument.

Page 807: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

651

if ($response) {

$dom = new DOMDocument();

$dom->loadXML($response);

$entries = $dom->getElementsByTagName('entry');

foreach($entries as $entry){

$tmp['title'] = $entry->getElementsByTagName('title')-

>item(0)->nodeValue;

$tmp['id'] = $entry->getElementsByTagName('id')-

>item(0)->nodeValue;

foreach($entry->getElementsByTagName('property') as

$property){

if (strcmp($property->getAttribute('name'),

'ga:accountId') == 0){

$tmp["accountId"] = $property-

>getAttribute('value');

}

if (strcmp($property->getAttribute('name'),

'ga:accountName') == 0){

$tmp["accountName"] = $property-

>getAttribute('value');

}

if (strcmp($property->getAttribute('name'),

'ga:profileId') == 0){

Page 808: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

652

$tmp["profileId"] = $property-

>getAttribute('value');

}

if (strcmp($property->getAttribute('name'),

'ga:webPropertyId') == 0){

$tmp["webProfileId"] = $property-

>getAttribute('value');

}

}

$profiles[] = $tmp;

}

} else {

throw new Exception('getWebsiteProfiles() failed to get a valid

XML from Google Analytics API service');

}

return $profiles;

}

/**

* Make the API call to the $url with the $_authCode specified

*

Page 809: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

653

* @param url

* @return result from _postTo

*/

private function _callAPI($url) {

return $this->_postTo($url,array(),array("Authorization: GoogleLogin

auth=".$this->_authCode));

}

/**

* Authenticate the email and password with Google, and set the $_authCode return

by Google

*

* @param none

* @return none

*/

private function _authenticate() {

$postdata = array(

'accountType' => 'GOOGLE',

'Email' => $this->_email,

'Passwd' => $this->_passwd,

'service' => 'analytics',

Page 810: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

654

'source' => 'askaboutphp-v01'

);

$response = $this-

>_postTo("https://www.google.com/accounts/ClientLogin", $postdata);

//process the response;

if ($response) {

preg_match('/Auth=(.*)/', $response, $matches);

if(isset($matches[1])) {

$this->_authCode = $matches[1];

return TRUE;

}

}

return FALSE;

}

/**

* Performs the curl calls to the $url specified.

*

* @param string $url

Page 811: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

655

* @param array $data - specify the data to be 'POST'ed to $url

* @param array $header - specify any header information

* @return $response from submission to $url

*/

private function _postTo($url, $data=array(), $header=array()) {

//check that the url is provided

if (!isset($url)) {

return FALSE;

}

//send the data by curl

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

if (count($data)>0) {

//POST METHOD

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

Page 812: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

656

} else {

$header[] = array("application/x-www-form-urlencoded");

curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

}

$response = curl_exec($ch);

$info = curl_getinfo($ch);

curl_close($ch);

//print_r($info);

//print $response;

if($info['http_code'] == 200) {

return $response;

} elseif ($info['http_code'] == 400) {

throw new Exception('Bad request - '.$response);

} elseif ($info['http_code'] == 401) {

throw new Exception('Permission Denied - '.$response);

} else {

return FALSE;

Page 813: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

657

}

}

}

?>

<?php

function createDateRangeArray($strDateFrom,$strDateTo) {

// takes two dates formatted as YYYY-MM-DD and creates an

// inclusive array of the dates between the from and to dates.

// could test validity of dates here but I'm already doing

// that in the main script

$aryRange=array();

$iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),

substr($strDateFrom,8,2),substr($strDateFrom,0,4));

$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),

substr($strDateTo,8,2),substr($strDateTo,0,4));

if ($iDateTo>=$iDateFrom) {

array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry

Page 814: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

658

while ($iDateFrom<$iDateTo) {

$iDateFrom+=86400; // add 24 hours

array_push($aryRange,date('Y-m-d',$iDateFrom));

}

}

return $aryRange;

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de-de" lang="de-de"

dir="ltr" >

<head>

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

<meta name="generator" content="Joomla! 1.5 - Open Source Content

Management" />

<title>Uninstall of Olark Chat Module for Joomla 1.5</title>

</head>

<body>

<?php

$tFiles=array();

Page 815: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

659

$tFiles[]="mgnote.php";

$tFiles[]="mgtext.php";

$tFiles[]="mgspacer.php";

define(DS, "/");

$sTargetPath =

'..'.DS.'..'.DS.'libraries'.DS.'joomla'.DS.'html'.DS.'parameter'.DS.'element';

foreach($tFiles as $sFile)

{

if(file_exists($sTargetPath.DS.$sFile))

{

echo "Uninstall '".$sTargetPath.DS.$sFile."'<br />\n";

unlink($sTargetPath.DS.$sFile);

}

else

echo "'".$sSourcePath.DS.$sFile."' not found.<br />\n";

}

?>

<br />

Goto module administration <a href="../../administrator/index.php?

option=com_modules">here</a>.

Page 816: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

660

</body>

</html>

efined('_JEXEC') or die('Direct Access to this location is not allowed.');

$sOlarkId=$params->get('olarkid', '');

$sSayText=(($params->get('say_text_DEFAULT', '0') == '1') ? JText::_("Type here

and hit <enter> to chat") : $params->get('say_text', ''));

if($sSayText == "Type here and hit <enter> to chat")

$sSayText="";

$sNotAvailableText=(($params->get('not_available_text_DEFAULT', '0') == '1') ?

JText::_("Live Help: Offline") : $params->get('not_available_text', ''));

if($sNotAvailableText == "Live Help: Offline")

$sNotAvailableText="";

$sOfflineMessage=(($params->get('offline_message_DEFAULT', '0') == '1') ?

JText::_("Our live support feature is currently offline. Please try again later.") :

$params->get('offline_message', ''));

if($sOfflineMessage == "Our live support feature is currently offline. Please try again

later.")

$sOfflineMessage="";

$sBusyText=(($params->get('busy_text_DEFAULT', '0') == '1') ? JText::_("Live

Help: Unavailable") : $params->get('busy_text', ''));

if($sBusyText == "Live Help: Unavailable")

Page 817: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

661

$sBusyText="";

$sBusyMessage=(($params->get('busy_message_DEFAULT', '0') == '1') ?

JText::_("All of our representatives are with other customers at this time. We will be

with you shortly.") : $params->get('busy_message', ''));

if($sBusyMessage == "All of our representatives are with other customers at this

time. We will be with you shortly.")

$sBusyMessage="";

$sBeforeChatText=(($params->get('before_chat_text_DEFAULT', '0') == '1') ?

JText::_("Click for Live Help") : $params->get('before_chat_text', ''));

if($sBeforeChatText == "Click for Live Help")

$sBeforeChatText="";

$sInChatText=(($params->get('in_chat_text_DEFAULT', '0') == '1') ? JText::_("Live

Help: Now Chatting") : $params->get('in_chat_text', ''));

if($sInChatText == "Live Help: Now Chatting")

$sInChatText="";

$sWelcomeMsg=(($params->get('welcome_msg_DEFAULT', '0') == '1') ?

JText::_("Questions? This window is your portal to live online support. We are

around, send us a message.") : $params->get('welcome_msg', ''));

if($sWelcomeMsg == "Questions? This window is your portal to live online support.

We are around, send us a message.")

$sWelcomeMsg="";

Page 818: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

662

$sPreChatMessage=(($params->get('pre_chat_message_DEFAULT', '0') == '1') ?

JText::_("Hi, I am around, click 'start chatting' to contact me.") : $params-

>get('pre_chat_message', ''));

if($sPreChatMessage == "Hi, I am around, click 'start chatting' to contact me.")

$sPreChatMessage="";

$sPreChatErrorText=(($params->get('pre_chat_error_text_DEFAULT', '0') == '1') ?

JText::_("Please enter your name and email in case we get disconnected.") : $params-

>get('pre_chat_error_text', ''));

if($sPreChatErrorText == "Please enter your name and email in case we get

disconnected.")

$sPreChatErrorText="";

$sPreChatSubmit=(($params->get('pre_chat_submit_DEFAULT', '0') == '1') ?

JText::_("Click here to start chatting") : $params->get('pre_chat_submit', ''));

if($sPreChatSubmit == "Click here to start chatting")

$sPreChatSubmit="";

$sEmailBodyErrorText=(($params->get('email_body_error_text_DEFAULT', '0') ==

'1') ? JText::_("Complete all fields") : $params->get('email_body_error_text', ''));

if($sEmailBodyErrorText == "Complete all fields")

$sEmailBodyErrorText="";

$sHablaNameInputText=(($params->get('habla_name_input_text_DEFAULT', '0') ==

'1') ? JText::_("<click here> and type your Name") : $params-

>get('habla_name_input_text', ''));

Page 819: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

663

if($sHablaNameInputText == "<click here> and type your Name")

$sHablaNameInputText="";

$sHablaOfflineEmailText=(($params->get('habla_offline_email_text_DEFAULT', '0')

== '1') ? JText::_("<click here> and type your Email") : $params-

>get('habla_offline_email_text', ''));

if($sHablaOfflineEmailText == "<click here> and type your Email")

$sHablaOfflineEmailText="";

$sHablaOfflineSubmitValue=(($params-

>get('habla_offline_submit_value_DEFAULT', '0') == '1') ? JText::_("Send") :

$params->get('habla_offline_submit_value', ''));

if($sHablaOfflineSubmitValue == "Send")

$sHablaOfflineSubmitValue="";

$sHablaOfflineBodyText=(($params->get('habla_offline_body_text_DEFAULT', '0')

== '1') ? JText::_("We are offline, send us a message") : $params-

>get('habla_offline_body_text', ''));

if($sHablaOfflineBodyText == "We are offline, send us a message")

$sHablaOfflineBodyText="";

$sHablaOfflineSentText=(($params->get('habla_offline_sent_text_DEFAULT', '0')

== '1') ? JText::_("Thank you for your message. We will get back to you as soon as

we can.") : $params->get('habla_offline_sent_text', ''));

if($sHablaOfflineSentText == "Thank you for your message. We will get back to you

as soon as we can.")

$sHablaOfflineSentText="";

Page 820: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

664

$sAwayText=(($params->get('away_text_DEFAULT', '0') == '1') ? JText::_("Live

Help: Unavailable") : $params->get('away_text', ''));

if($sAwayText == "Live Help: Unavailable")

$sAwayText="";

$sSendText=(($params->get('send_text_DEFAULT', '0') == '1') ? JText::_("Send") :

$params->get('send_text', ''));

if($sSendText == "Send")

$sSendText="";

$sSendingText=(($params->get('sending_text_DEFAULT', '0') == '1') ?

JText::_("sending") : $params->get('sending_text', ''));

if($sSendingText == "sending")

$sSendingText="";

$nInline=$params->get('inline', '-1');

$nShowAway=$params->get('show_away', '-1');

$nShowAwayAsHeader=$params->get('show_away_as_header', '-1');

$nHideMinMaxButtons=$params->get('hide_min_max_buttons', '-1');

$nEnableButtons=$params->get('enable_buttons', '-1');

$nParseLinks=$params->get('parse_links', '-1');

Page 821: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

665

$sUrlHandlerTargetWindow=(($params-

>get('url_handler_target_window_DEFAULT', '0') == '1') ? "_top" : $params-

>get('url_handler_target_window', ''));

if($sUrlHandlerTargetWindow == "_top")

$sUrlHandlerTargetWindow="";

$sUrlLocalPattern=(($params->get('url_local_pattern_DEFAULT', '0') == '1') ?

"document.domain" : $params->get('url_local_pattern', ''));

if($sUrlLocalPattern == "document.domain")

$sUrlLocalPattern="";

$sUrlHandler=(($params->get('url_handler_DEFAULT', '0') == '1') ?

"http://static.hab.la/js/html/url_handler.html" : $params->get('url_handler', ''));

if($sUrlHandler == "http://static.hab.la/js/html/url_handler.html")

$sUrlHandler="";

$sDefaultFlashOffIcon=(($params->get('default_flash_off_icon_DEFAULT', '0') ==

'1') ? "http://static.hab.la/js/images/white.ico" : $params->get('default_flash_off_icon',

''));

if($sDefaultFlashOffIcon == "http://static.hab.la/js/images/white.ico")

$sDefaultFlashOffIcon="";

$sDefaultFlashOnIcon=(($params->get('default_flash_on_icon_DEFAULT', '0') ==

'1') ? "http://static.hab.la/js/images/orange.ico" : $params-

>get('default_flash_on_icon', ''));

if($sDefaultFlashOnIcon == "http://static.hab.la/js/images/orange.ico")

Page 822: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

666

$sDefaultFlashOnIcon="";

$nFlashIcons=$params->get('flash_icons', '-1');

$nDisableGoogleAnalytics=$params->get('disableGoogleAnalytics', '-1');

$bNotSecure=strpos($_SERVER['SERVER_PROTOCOL'], "HTTPS") === false;

?>

<script type="text/javascript" src="http<?php if(!$bNotSecure) echo "s"; ?

>://static.olark.com/js/wc.js"></script>

<script type="text/javascript">

tConfig=wc_config();

<?php

if($sSayText != "")

echo "tConfig.vars[\"say_text\"]=\"$sSayText\";\n";

if($sNotAvailableText != "")

echo "tConfig.vars[\"not_available_text\"]=\"$sNotAvailableText\";\n";

if($sOfflineMessage != "")

echo "tConfig.vars[\"offline_message\"]=\"$sOfflineMessage\";\n";

if($sBusyText != "")

Page 823: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

667

echo "tConfig.vars[\"busy_text\"]=\"$sBusyText\";\n";

if($sBusyMessage != "")

echo "tConfig.vars[\"busy_message\"]=\"$sBusyMessage\";\n";

if($sBeforeChatText != "")

echo "tConfig.vars[\"before_chat_text\"]=\"$sBeforeChatText\";\n";

if($sInChatText != "")

echo "tConfig.vars[\"in_chat_text\"]=\"$sInChatText\";\n";

if($sWelcomeMsg != "")

echo "tConfig.vars[\"welcome_msg\"]=\"$sWelcomeMsg\";\n";

if($sPreChatMessage != "")

echo "tConfig.vars[\"pre_chat_message\"]=\"$sPreChatMessage\";\n";

if($sPreChatErrorText != "")

echo "tConfig.vars[\"pre_chat_error_text\"]=\"$sPreChatErrorText\";\n";

if($sPreChatSubmit != "")

echo "tConfig.vars[\"pre_chat_submit\"]=\"$sPreChatSubmit\";\n";

if($sEmailBodyErrorText != "")

Page 824: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

668

echo

"tConfig.vars[\"email_body_error_text\"]=\"$sEmailBodyErrorText\";\n";

if($sHablaNameInputText != "")

echo

"tConfig.vars[\"habla_name_input_text\"]=\"$sHablaNameInputText\";\n";

if($sHablaOfflineBodyText != "")

echo

"tConfig.vars[\"habla_offline_body_text\"]=\"$sHablaOfflineBodyText\";\n";

if($sHablaOfflineEmailText != "")

echo

"tConfig.vars[\"habla_offline_email_text\"]=\"$sHablaOfflineEmailText\";\n";

if($sHablaOfflineSentText != "")

echo

"tConfig.vars[\"habla_offline_sent_text\"]=\"$sHablaOfflineSentText\";\n";

if($sHablaOfflineSubmitValue != "")

echo

"tConfig.vars[\"habla_offline_submit_value\"]=\"$sHablaOfflineSubmitValue\";\n";

if($sAwayText != "")

echo "tConfig.vars[\"away_text\"]=\"$sAwayText\";\n";

if($sSendText != "")

echo "tConfig.vars[\"send_text\"]=\"$sSendText\";\n";

Page 825: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

669

if($sSendingText != "")

echo "tConfig.vars[\"sending_text\"]=\"$sSendingText\";\n";

if($nInline != "-1")

echo "tConfig.setInline($nInline);\n";

if($nShowAway != "-1")

echo "tConfig.vars[\"show_away\"]=$nShowAway;\n";

if($nShowAwayAsHeader != "-1")

echo "tConfig.vars[\"show_away_as_header\"]=$nShowAwayAsHeader;\n";

if($nHideMinMaxButtons != "-1")

echo "tConfig.vars[\"hide_min_max_buttons\"]=$nHideMinMaxButtons;\n";

if($nEnableButtons != "-1")

echo "tConfig.vars[\"enable_buttons\"]=$nEnableButtons;\n";

if($nParseLinks != "-1")

echo "tConfig.vars[\"parse_links\"]=$nParseLinks;\n";

if($sUrlHandlerTargetWindow != "")

echo

"tConfig.vars[\"url_handler_target_window\"]=\"$sUrlHandlerTargetWindow\";\n";

Page 826: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

670

if($sUrlLocalPattern != "")

echo "tConfig.vars[\"url_local_pattern\"]=\"$sUrlLocalPattern\";\n";

if($sUrlHandler != "")

echo "tConfig.vars[\"url_handler\"]=\"$sUrlHandler\";\n";

if($sDefaultFlashOffIcon != "")

echo "tConfig.vars[\"default_flash_off_icon\"]=\"$sDefaultFlashOffIcon\";\n";

if($sDefaultFlashOnIcon != "")

echo "tConfig.vars[\"default_flash_on_icon\"]=\"$sDefaultFlashOnIcon\";\n";

if($nFlashIcons != "-1")

echo "tConfig.vars[\"flash_icons\"]=$nFlashIcons;\n";

if($nDisableGoogleAnalytics != "-1")

echo

"tConfig.vars[\"disableGoogleAnalytics\"]=$nDisableGoogleAnalytics;\n";

?>

wc_init("<?php echo $sOlarkId; ?>", tConfig);

</script>

class JElementMGText extends JElement

{

Page 827: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

671

/**

* Element name

*

* @access protected

* @var string

*/

var $_name = 'MGText';

//--------------------------------------------------------------------------------------------

----------------

function fetchElement($aName, $aValue, &$aNode, $aControlName)

{

$nSize=( $aNode->attributes('size') ? 'size="'.$aNode-

>attributes('size').'"' : '' );

$sClass=( $aNode->attributes('class') ? 'class="'.$aNode-

>attributes('class').'"' : 'class="text_area"' );

$sDefault=$aNode->attributes('default');

if($aValue == "" || trim($aValue) == trim($sDefault))

{

$sChecked='checked="checked"';

Page 828: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

672

$aValue=( $aNode->attributes('default') ? $aNode-

>attributes('default') : '' );

$sDisabled='disabled="disabled"';

}

else

{

$sChecked="";

}

$sTitle=($aNode->attributes('title') ? JText::_($aNode-

>attributes('title')) : $aValue);

/*

* Required to avoid a cycle of encoding &

* html_entity_decode was used in place of htmlspecialchars_decode

because

* htmlspecialchars_decode is not compatible with PHP 4

*/

$aValue=htmlspecialchars(html_entity_decode($aValue,

ENT_QUOTES), ENT_QUOTES);

Page 829: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

673

$sOnClickChkBox= "onclick=\"";

$sOnClickChkBox.="(this.checked ";

$sOnClickChkBox.="?

document.getElementById('$aControlName$aName').value='".addslashes($sDefault).

"' ";

$sOnClickChkBox.=":

document.getElementById('$aControlName$aName').value=''); ";

$sOnClickChkBox.="(this.checked ";

$sOnClickChkBox.="?

document.getElementById('$aControlName$aName').disabled=true ";

$sOnClickChkBox.=":

document.getElementById('$aControlName$aName').disabled=false);\"";

return '<input type="checkbox" name="'.$aControlName.'['.

$aName.'_DEFAULT]" value="1" '.$sChecked.' '.$sOnClickChkBox.'

/>'.JText::_("Default")

.' <input type="text" name="'.$aControlName.'['.$aName.']"

id="'.$aControlName.$aName.'" value="'.$aValue.'" title="'.$sTitle.'" alt="'.$sTitle.'"

'.$sClass.' '.$sSize.' '.$sDisabled.' />';

}

}

defined('JPATH_BASE') or die();

Page 830: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

674

/**

* Renders a spacer element

*

* @package Joomla.Framework

* @subpackage Parameter

* @since 1.5

*/

class JElementMGSpacer extends JElement

{

/**

* Element name

*

* @access protected

* @var string

*/

var $_name = 'MGSpacer';

//-----------------------------------------------------------------------------------------------------

function fetchTooltip($aLabel, $aDescription, &$aNode, $aControlName,

$aName)

Page 831: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

675

{

return $aDescription;

}

//-----------------------------------------------------------------------------------------------------

function fetchElement($aName, $aValue, &$aNode, $aControlName)

{

$sStyle1=( $aNode->attributes('style') ? 'style="'.$aNode-

>attributes('style').'"' : 'style="font-weight: bold; text-align: center;"' );

$sStyle2=( $aNode->attributes('style2') ? 'style="'.$aNode-

>attributes('style2').'"' : 'style="margin-top: -15px;"' );

$sStyle3=( $aNode->attributes('style3') ? 'style="'.$aNode-

>attributes('style3').'"' : 'style="background-color: #F6F6F6; padding-left: 5px;

padding-right: 5px;"' );

$sClass=( $aNode->attributes('class') ? 'class="'.$aNode-

>attributes('class').'"' : 'class="mgspacer"' );

return "<div $sClass $sStyle1><hr /><div $sStyle2><span

$sStyle3>".JText::_($aValue)."</span></div></div>";

}

}

defined('JPATH_BASE') or die();

Page 832: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

676

//----------------------------------------------------------------------------------------------------

/**

* Renders a note element

*

* @package Joomla.Framework

* @subpackage Parameter

* @since 1.5

*/

class JElementMGNote extends JElement

{

/**

* Element name

*

* @access protected

* @var string

*/

var $_name = 'MGNode';

//--------------------------------------------------------------------------------------------

-

function fetchElement($aName, $aValue, &$aNode, $aControlName)

Page 833: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

677

{

$sStyle=( $aNode->attributes('style') ? 'style="'.$aNode-

>attributes('style').'"' : '' );

$sClass=( $aNode->attributes('class') ? 'class="'.$aNode-

>attributes('class').'"' : 'class="mgnote"' );

return "<span $sClass $sStyle>".JText::_($aValue)."</span>";

}

}

defined('_JEXEC') or die('Direct Access to this location is not allowed.');

class modFeedHelper

{

function getFeed($params)

{

// module params

$rssurl = $params->get('rssurl', '');

// get RSS parsed object

$options = array();

$options['rssUrl'] = $rssurl;

Page 834: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

678

if ($params->get('cache')) {

$options['cache_time'] = $params->get('cache_time', 15) ;

$options['cache_time'] *= 60;

} else {

$options['cache_time'] = null;

}

$rssDoc =& JFactory::getXMLparser('RSS', $options);

$feed = new stdclass();

if ($rssDoc != false)

{

// channel header and link

$feed->title = $rssDoc->get_title();

$feed->link = $rssDoc->get_link();

$feed->description = $rssDoc->get_description();

// channel image if exists

$feed->image->url = $rssDoc->get_image_url();

Page 835: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

679

$feed->image->title = $rssDoc->get_image_title();

// items

$items = $rssDoc->get_items();

// feed elements

$feed->items = array_slice($items, 0, $params->get('rssitems',

5));

} else {

$feed = false;

}

return $feed;

}

}

Page 836: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

680

CAPÍTULO II

MANUAL USUARIO

2.1 INTRODUCCIÓN

Este manual contiene información respecto a cómo operar el sitio web, además

indicaciones de cómo funciona y los conocimientos mínimos que debe tener el

usuario para transmitir y comprender la idea del autor.

2.2 OBJETIVOS DE ESTE MANUAL

Ayudar al usuario en general al correcto desenvolvimiento en nuestro sitio web, el

mismo que comprende:

Conocer el alcance de todo el sitio por medio de una explicación detallada e

ilustrada de cada una de las opciones que lo forman. Funciones no previstas o inesperadas.

Page 837: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

681

2.3 A QUIEN VA DIRIGIDO ESTE MANUAL

Está dirigido, a todos los cibernautas que deseen interactuar con un Mashup de

contenido, así como a todos aquellos que deseen explotar las bondades del sitio para

aprovechar de una manera eficaz el desempeño de las Tecnologías de Información y

mejorar la experiencia del usuario.

2.4 CONOCIMIENTOS PREVIOS

Se recomienda, que los usuarios tengan conocimientos generales de cómo buscar

información en Internet, el saber utilizar los navegadores que existen en el mercado.

Ya que la usabilidad del sitio está calificada para resolverlo bajo cualquier servidor,

Sistema Operativo e Idioma del sitio. Es decir estamos aptos para que la Interacción

Persona computador, sea una experiencia cómoda e inolvidable, lo que le permite

regresar al sitio. Y quien quita ser una fuente de ingresos colocando publicidad.

2.5 ACERCA DE ESTE MANUAL

Este manual, contiene las instrucciones necesarias, para indicar cuáles son las mejores

opciones a seguir para el desempeño de una funcionalidad en especial.

2.6 CARACTERÍSTICAS DEL SITIO

Page 838: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

682

2.7.1 INTRODUCCIÓN

En un navegador, colocamos la url:

Gráfico No. 24 Url Oficial del Mashup

Elaborado por: Araceli Dávila M.

El equivalente para Mozilla Firefox, Konqueror, bajo Windows, Bajo Linux, Bajo

Mac, Bajo una conexión ADSL, Dial Up e inclusive Inalámbrica, el resultado es el

mismo.

2.7.2 BENEFICIOS

Queremos contribuir con una nueva forma de interactuar con su clientela,

dando a conocer sus servicios, noticias de sus productos. Al tener un site alojado en Internet, trabaja las 24 horas, por 7 días a la

semana. Teniendo disponibilidad 100% del canal a sus clientes. Universalidad de la web, al tener acceso desde un celular o su Pc, Tablet,

etc. Contribuimos con tener espacio en la web, lo que mejora en la imagen de

su empresa y posicionamiento de una marca.

Page 839: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

683

2.8 MASHUP DE CONTENIDOS

2.8.1 PÁGINA PRINCIPAL

Gráfico No. 25 Página principal www.mantentealdia.net

Elaborado por: Araceli Dávila M.

2.9 DESCRIPCIÓN DEL SITIO

2.9.1 ADMINISTRACIÓN

Page 840: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

684

Todos los sitios Joomla, cuentan con un manejador de “Catalogos”(por llamarlo

así), a las diferentes características que se manejarán en el sitio. El link para

acceder, es este:

Gráfico No. 26 Sitio Web de Administración

Elaborado por: Araceli Dávila M.

2.9.1.1 Inicio de Sesión

La página de acceso, enseguida nos llevará a logearnos con nuestro user y

password.

Gráfico No. 27 Loggin de Inicio – Administración Joomla

Page 841: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

685

Elaborado por: Araceli Dávila M.

Cómo se indicó previamente, Joomla maneja como Catálogos: Los artículos,

secciones, categorías, contenido multimedia, componentes, pluggins, usuarios, esto

es claro en la pantalla principal de Administración.

Gráfico No. 28 Pantalla principal de Administración

Elaborado por: Araceli Dávila M.

2.9.1.2 Administrador de Artículos

Page 842: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

686

Nuestra materia prima, son los artículos, para lo cual el Administrador de artículos

maneja las opciones de crear, publicar una noticia seleccionada, archivar,

despublicar.

Gráfico No. 29 Administrador de Artículos

Elaborado por: Araceli Dávila M.

Este gestor, muy intuitivo por cierto; muestra la fecha de creación, id en Base de

datos, y si un artículo se publica solo es cuestión de dar click sobre el ícono

correspondiente para aplicar.

2.9.1.3 Administrador de Secciones

Page 843: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

687

También es necesario para nuestra organización, que los artículos estén asignados

en una respectiva Categoría, y estas en una respectiva Sección

El Administrador de Secciones, al igual que el concepto de artículos es muy

intuitivo.

Esto quiere decir, que si se despublica toda una sección, se despublican todos los

artículos incluidos en esa respectiva categoría y esta a su vez de su sección.

Gráfico No. 30 Administrador de Artículos

Elaborado por: Araceli Dávila M.

2.9.1.4 Administrador de Categorías

Page 844: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

688

Como ya indicamos en el concepto anterior, las categorías se ubican dentro de una

respectiva sección, y las opciones a gestionar son publicar, retiro de publicación,

creación.

Gráfico No. 31 Administrador de Categorías

Elaborado por: Araceli Dávila M.

2.9.1.5 Administrador de Idiomas

El Gestor administrativo se encuentra en el menú:

Extensiones->Administrador de idiomas.

El idioma predeterminado, se lo reconocerá por el dibujo de la estrella amarilla,

donde nos muestra una lista de paquetes instaladas.

Gráfico No. 32 Administrador de Idiomas

Page 845: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

689

Elaborado por: Araceli Dávila M.

2.9.1.6 Administrador de Plantillas

En este gestor, aparecen las plantillas instaladas en nuestro sitio, cabe destacar que

sobre este diseño, se crearan los distintos componentes como Encuestas, Chat,

Blogs, Slider que vienen en formatos prediseñados.

Gráfico No. 33 Administrador de Plantillas

Elaborado por: Araceli Dávila M.

Page 846: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

690

Las plantillas, tienen la factibilidad de cambiar los tipos de letras, tamaños,

colores, y estilos.

Al colocarnos sobre una plantilla podemos ver una presentación preliminar.

Gráfico No. 34 Presentación preliminares de plantillas

Elaborado por: Araceli Dávila M.

2.9.1.7 Administrador de Usuarios

El Administrador es el siguiente:

Gráfico No.35 Administrador de Usuarios

Page 847: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

691

Elaborado por: Araceli Dávila M.

Este nos permite gestionar, la creación directa por medio de otro usuario

Administrador, Finalizar la sesión de los usuarios conectados al sitio, dar de alta a

los usuarios que están registrados, etc.

Gráfico No. 36 Formulario de Ingreso a un usuario

Elaborado por: Araceli Dávila M.

Asi mismo, se puede asignar el idioma de Front End (Portal), asignado a ese

usuario, bloquearlo, etc.

Page 848: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

692

Cada usuario tiene un perfil de seguridad, donde nosotros los administradores los

podemos ubicar:

Gráfico No. 37 Grupo de Seguridad asignado al usuario

Elaborado por: Araceli Dávila M.

2.9.1.8 Administrador de Módulos

Quizás, el corazón de Joomla, es aquel que maneja, crea y organiza los diferentes

módulos que se pueden instalar, para elaborar una funcionalidad “x”.

Los módulos nativos son, Encuestas, Inicio de Sesión, Contactenos, Rss, Pie de

Página, Who is Online?, ruta de acceso.

Page 849: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

693

Gráfico No. 38 Módulos

Elaborado por: Araceli Dávila M.

Podemos desatacar a módulos que han sido bajados de Internet, para aplicar una

funcionalidad en especial.

Entre ellas el módulo CB Twitter, el cual utiliza la Api de http://twitter.com/ para

enlazar nuestra página con el servicio respectivo en conjunto con CB Login.

Asi también, Shout Box(Chat), Slick Rss(Suscriptores de Noticias enlazado a

www.eluniverso.com).

El Administrador de módulos es el siguiente:

Gráfico No. 39 Administrador de Módulos

Page 850: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

694

Elaborado por: Araceli Dávila M.

Veamos un poco el módulo de Redes Sociales, para aquello seleccionamos el

respectivo ítem:

Gráfico No. 40 Redes Sociales

Elaborado por: Araceli Dávila M.

Gráfico No. 41 Edición Modulo de Redes Sociales

Page 851: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

695

Elaborado por: Araceli Dávila M.

Como vemos, este componente tiene la opción de poner una imagen y que esa

imagen llame a su URL correspondiente.

2.9.2 VISITANTE

El usuario visitante, será cualquier cibernauta que se encontró en la página con un

Mashup de noticias, su gusto a la información, encontró accesos a otros servicios sin

necesidad de salir de esta página.

2.9.2.1 Regístrese

Un Usuario puede disfrutar de privilegios al registrarse en el sitio, no podía ser de

otra manera, tener un control respectivo de las personas que quieren compartir sus

diferentes experiencias con la comunidad Mashup.

Para lo cual damos click en “registro”

Page 852: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

696

Gráfico No. 42 Registro de Usuario nuevo

Elaborado por: Araceli Dávila M.

EL formulario en cuestión es el siguiente:

Gráfico No. 43 Formulario de Registro

Elaborado por: Araceli Dávila M.

Cabe destacar que, el Administrador del sitio dará de alta a los usuarios que cree

tener el margen de conducta en el sitio.

Un usuario correctamente loggeado y dado de alta, se muestra asi:

Page 853: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

697

Gráfico No. 44 Usuario Correctamente Loggeado

Elaborado por: Araceli Dávila M.

2.9.2.2 Uso de Twitter

El cibernauta, no necesariamente debe registrarse para hacer uso de los privilegios,

puede interactuar con el componente twitter en caso de tener usuario y contraseña.

Gráfico No. 45 Inicio de Sesión Twitter

Elaborado por: Araceli Dávila M.

Page 854: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

698

Luego, el formulario de conexión entre el sitio www.mantentealdia.net y

twitter.com, confirma los datos de un usuario válido de Twitter y conecta ambos

servicios entre sí.

Queremos aclarar, que esta funcionalidad no depende de nuestros servidores, ya

que es exclusiva de los servicios de Twitter, esto quiere decir que si se cae el

servicio como tal, no estará disponible en el Mashup.

Gráfico No. 46 Formulario de Conexión mashup-Twitter

Page 855: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

699

Elaborado por: Araceli Dávila M.

En el momento que la conexión es establecida, queda el usuario loggeado en el

servicio normal de www.twitter.com:

Gráfico No. 47 Página principal de Twitter

Elaborado por: Araceli Dávila M.

Y a su vez, es replicada la sesión a nuestro sitio:

Gráfico No. 48 Sesión iniciada, servicio Twitter en Mashup

Elaborado por: Araceli Dávila M.

Page 856: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

700

A su vez, el usuario puede hacer uso del chat entre los usuarios registrados al sitio.

Gráfico No. 49 Chat Habilitado para usuario de Twitter

Elaborado por: Araceli Dávila M.

Y sobre la parte inferior derecha, el usuario puede leer sus tweets, enviados y

receptados.

Ver la cantidad de seguidores, e inclusive formatos de sindicación de contenidos.

Gráfico No. 50 Módulo Twitter en Mashup

Elaborado por: Araceli Dávila M

2.9.2.3 Participe en la Encuesta

Page 857: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

701

Todos los visitantes pueden hacer uso de la encuesta, esto para medir el grado de

aceptación de un servicio, de un producto. Cabe destacar que el servidor evalúa

que una encuesta la puede hacer un usuario dentro del mismo día y de una misma

IP.

Gráfico No. 51 Encuestas

Elaborado por: Araceli Dávila M.

2.9.2.4 Chat en vivo

Este servicio, está habilitado entre usuarios de Twitter, correctamente habilitados,

y usuarios que se han registrado en nuestro Mashup.

Gráfico No. 52 Chat

Page 858: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

702

Elaborado por: Araceli Dávila M.

2.9.2.5 Chat interactivo

Este servicio ofrece más novedades en cuanto a las forma de chatear ya que

contiene dibujos los cuales se puede añadir al momento de chatear, tiene habilitado

el sonido, maneja historial del chat para que la persona tenga acceso en el caso de

que quiera recordar de manera textual todo lo que ha chateado con la otra persona

en ese momento. Tiene la opción de cambiar el color de letra.

Gráfico No. 53 Chat Interactivo

Elaborado por: Araceli Dávila M

Page 859: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

703

2.9.2.6 Infórmese con Noticias desde Noticias Online

Este servicio está conectado a varias páginas de noticias, se actualiza a medida se

cambian las noticias en la página principal del diario, de yahoo y de google.

Gráfico No. 54 RSS – Varios RSS de Noticias

Page 860: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

704

Elaborado por: Araceli Dávila M.

2.9.2.7 Suba Fotos, comente acerca de las otras

El servicio de subida de fotos, está disponible a los usuarios respectivamente

calificados y habilitados por los Administradores de mashup.

Gráfico No. 55 Fotos

Page 861: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

705

Elaborado por: Araceli Dávila M.

Para subir, una foto se debe escoger la opción respectiva, título de la misma,

descripción. Tomar en cuenta el tamaño máximo permitido.

Gráfico No. 56 Subida de Fotos

Elaborado por: Araceli Dávila M.

Y la fotografía se encuentra lista para ser comentada.

Gráfico No. 57 Comentarios en Fotos

Page 862: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

706

Elaborado por: Araceli Dávila M.

2.9.2.8 Suba un link de Video, comentario de las otras

La sección de Videos, contiene una parte de videos más rankeados (Mas vistos), y

los que mas gustan (populares),

Gráfico No. 58 Videos

Elaborado por: Araceli Dávila M.

Page 863: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

707

Si queremos ver el video, damos click sobre el que solicitamos, y también queda la

posibilidad de comentar dicho video.

Gráfico No. 59 Ver Videos

Elaborado por: Araceli Dávila M.

La forma de subir videos, es solo de un enlace, se tomó esa decisión para no subir

archivos pesados a los servidores, sino mas bien se utilzará recursos externos

(Youtube, Google)

Page 864: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

708

Gráfico No. 60 Subir Videos

Elaborado por: Araceli Dávila M.

2.9.2.9 Suba su Noticia o artículo de interés

Esta es la entrada principal de noticias de usuarios, donde se puede buscar entre las

noticias, debidamente categorizadas y la opción de escribir una nueva entrada, en

la parte derecha del título sale el avatar de la persona autora de dicho artículo.

Gráfico No. 61 Noticia escrita por un usuario

Elaborado por: Araceli Dávila M.

Page 865: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

709

En “Escribir nueva entrada”, da apertura a un editor de texto basado en Joomla,

para insertar información y dar formato al texto, incluir fotografías e incluso

contenido multimedia.

Gráfico No. 62 Editor de texto de Noticias

Elaborado por: Araceli Dávila M.

Cabe mencionar, que este texto puede ser de otras fuentes, el cual muchas veces

producto de copiar y pegar, puede traer inclusive el formato html de otro sitio web,

lo que deberíamos considerar en revisar periódicamente las noticias, para evitar

sorpresas de alteraciones de html del formato de la página nativa Joomla.

2.9.2.10 Los 10 mas Bloggeados

Este es el rankin de las personas que mas noticias han publicado, se puede

modificar en la visualización de la cantidad de personas a mostrar.

Page 866: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

710

Gráfico No. 63 Los más Bloggeados

Elaborado por: Araceli Dávila M.

2.9.2.11 Valore un Anuncio Clasificado

En la sección de clasificados, hemos dividido a Servicios y productos, a los tipos

de avisos que se pueden escribir. Esta es la sección donde pueden publicar un aviso

de su servicio a ofrecer a la clientela.

Page 867: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

711

Gráfico No. 64 Productos y Servicios

Elaborado por: Araceli Dávila M.

En el caso de Servicios, tenemos un listado de aquellos registrados previamente.

Gráfico No. 65 Lista de servicios disponibles

Elaborado por: Araceli Dávila M.

Page 868: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

712

En el caso, que el aviso le haya servido a su medida, se debe calificar para obtener

una puntuación de los usuarios. El mismo que servirá para medir la valoración del

profesional que ofrece sus servicios.

Ya queda a elección del resto de usuarios, hacer uso de un aviso con puntuación

baja.

Gráfico No. 66 Valoración del Servicio

Elaborado por: Araceli Dávila M.

2.9.2.12 Contacte al Administrador del Sitio

En caso que debamos comunicar, algún tema de interés con el Administrador del

site, accedemos a esta sección, puede ser para tratar temas de artículos que atenten

a propiedad intelectual, artículos que atenten a la integridad de una persona, o

Page 869: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

713

solicitar nuestros servicios para publicar en cualquiera de los temas anteriores,

utilizamos el formulario de contacto.

Cabe recalcar, que el correo electrónico llegará a la persona que esta como

Administrador del Sitio general, ya que como bien sabemos. El sitio puede tener

algunos administradores.

Gráfico No. 67 Formulario de Contacto

Elaborado por: Araceli Dávila M.

2.9.2.13 “Me Gusta”, Funcionalidad de Facebook

Sobre la página principal del sitio, existe la funcionalidad “Me gusta”, dónde el

usuario hace uso de la misma.

Page 870: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

714

Gráfico No. 68 Facebook-“Me Gusta”

Elaborado por: Araceli Dávila M.

Si no está loggeado en Facebook, se abrirá un formulario de acceso rápido a la red

social en mención.

Gráfico No. 69 Formulario de Acceso rápido a Facebook

Elaborado por: Araceli Dávila M.

Page 871: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

715

Y automáticamente el contador registra el voto – “Me gusta”

Gráfico No. 70 Voto en “Me gusta” – Facebook

Elaborado por: Araceli Dávila M.

2.9.2.14 “Recomendar”, Funcionalidad Facebook

En el pie de la página, existe la funcionalidad descrita:

Gráfico No. 71 Recomendar

Elaborado por: Araceli Dávila M.

En caso que el usuario no tenga cuenta en Facebook, puede hacer click en

“Regístrate” para iniciar una. Esta funcionalidad además presenta a los usuarios

que han recomendado el sitio. Para hacer uso de esta funcionalidad, se debe estar

previamente loggeado, caso contrario se abre un mini formulario de acceso a

Facebook. Y Se registra el voto recomendado (Ver fotografía “Formulario de

acceso rápido a Facebook”).

Page 872: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

716

Cabe recalcar que el producto que se recomienda es el uso del sitio

www.mantentealdia.net

2.9.2.15 Tweets En Línea

Está disponible el Hashtag #noticias_mantentealdia, cualquier mención del

mismo será publicado directa y dinámicamente en nuestro sitio.

Gráfico No. 72 Tweets en línea

Elaborado por: Araceli Dávila M.

Page 873: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

717

Los usuarios pueden enviar sus tweets desde cualquier plataforma, ya sea móvil o

por el sitio oficial. Además por el botón Twittear. Solo deben contener el hashtag

en mención.

Gráfico No. 73 Botón Twittear

Elaborado por: Araceli Dávila M.

2.9.2.15 Botón Siguem en Twitter

Se encuentra disponible para todas las personas que tengan cuentan en twitter y

quieran seguir al sitio mantentealdia.net por medio de la red social de twitter.

Gráfico No. 74 Botón Sigueme de Twitter

Page 874: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

718

Elaborado por: Araceli Dávila M.

Una vez que el usuario le da click en el icono del pájaro el cual es símbolo del twitter

automáticamente le presentará otra ventana en la que le podrá seguir y

automáticamente seguirá al sitio oficial en twitter el cual se llama mantentealdia.net.

Gráfico No. 75 Siguiendo al sitio en twitter

Elaborado por: Araceli Dávila M.

2.9.2.16 Tráfico del Sitio

En la parte principal del sitio mantentealdia.net se encuentra el menú más que al

darle click aparecerá otro submenú llamdo Traffic Analytics.

Page 875: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

719

Gráfico No. 76 Menú del Tráfico del Sitio

Elaborado por: Araceli Dávila M.

Cuando el usuario da click en el submenú de Traficc Analytics automáticamente se

mostrará una pantalla en la cual presentará el número de personas que han visitado el

sitio y en que tipo de explorador han realizado su visit

Gráfico No. 77 Monitoreo de Tráfico del Sitio

Page 876: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

720

Elaborado por: Araceli Dávila M.

2.9.2.17 Módulo adicional de Administración.

Este tipo de administración esta creado para personas que no tenga conocimientos

de joomla pero para ingresar al administador deben tener permiso de

administrador, por ende cualquier usuario no podrá ser administrador, para lo cual

este permiso solo lo otorgará el administrador de joomla el cual maneja todo los

permisos y es encargado de monitorear frecuentemente al sitio mantentealdia.net.

Este administrador tiene solo las funciones principales de los módulos de

administración de joomla como crear y eliminar usuario, ingresar noticias, crear

categorías entre otros y fue realizado específicamente para personas que no tengan

el conocimiento de joomla y que recién empiecen en el ámbito de administración

de sitios web.

Este administrador se lo puede encontrar en el menú principal del sitio

www.mantentealdia.net que se llama mi cuenta que al darle click aparecerá un

submenú llamado administración.

Gráfico No. 78 Menú para ingresar al administrador

Page 877: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

721

Elaborado por: Araceli Dávila M.

Cuando el usuario da click en el submenú de Administración automáticamente se

mostrará una pantalla en la cual presentará el administrador del sitio, el cual lo deberá

manejar con la responsabilidad que amerita dicha función ya que tendrá acceso y

permisos especiales para monitorear el sitio www.mantenteladia.net

Gráfico No. 79 Monitoreo de Administración

Elaborado por: Araceli Dávila M.

Page 878: Repositorio Universidad de Guayaquil: Página de iniciorepositorio.ug.edu.ec/bitstream/redug/6767/1/TesisCompleta-407-20… · 2 APROBACION DEL TUTOR En mi calidad de Tutor del trabajo

722