UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Física Carrera de Ingeniería en Sistemas Computacionales “PORTAL DE VENTA DE INFORMACION PERSONAL BAJO SUSCRIPCION” PROYECTO DE GRADO Previo a la Obtención del Título de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: Diana Cecilia Alava Espinoza Freddy Walter Cevallos Tomalá Carlos Alberto Orrala Holguín GUAYAQUIL – ECUADOR Año: 2007 II AGRADECIMIENTO Agradecemos a Dios por la salud y la fortaleza para concluir con éxito una etapa más de nuestras vidas, a todas las personas que han contribuido de alguna manera la realización del proyecto y a nuestros padres por estar siempre guiándonos en nuestra vida. III DEDICATORIA Dedicamos este trabajo a Dios por estar siempre a nuestro lado en todo momento. A nuestros padres y hermanos por todo el cariño, la confianza, y el amor brindado en este tiempo de esfuerzo y sacrificio. IV TRIBUNAL DE GRADUACIÓN Presidente del Tribunal Primer Vocal Segundo Vocal Secretario V DECLARACIÓN EXPRESA “La autoría de la tesis de grado corresponde exclusivamente al suscrito(s), perteneciendo a la Universidad de Guayaquil los derechos que generen la aplicación de la misma”. (Reglamento de Graduación de la Carrera de Ingeniería en sistemas Computacionales, Art. 26) VI RESUMEN Aquidescarga.com es un portal lo suficientemente vendedor, dedicado a la “Venta de Información”; bajo un modelo de negocio establecido es decir por suscripción, brindando de esta manera beneficios que merman los problemas de la población cibernautica; que con frecuencia usa la herramienta tecnológica, para obtener servicios de publicación y descarga oportuna. Nuestro sitio Web puede ser visitado desde cualquier parte del mundo, gracias a las herramientas multiplataformas que permiten la visualización del sitio en los diferentes navegadores como Internet Explore 7.0 y Mozilla. Pero para poder ser miembro activo de nuestro portal, deberá registrase con datos personales básicos que no atente su integridad financiera. Al ser miembro de aquidescarga el usuario tendrá opciones como. Suscripción: Las cual puede ser mensual, trimestral, semestral, etc. Publicación: Deben ser archivos menores de 4MG, en formato PDF. Búsqueda: Pueden ser hechas a los títulos o al resumen breve por categoría. Descargar: Añadir al carro de compra lo que desea bajar. VII Pago Estado de Cuenta: Donde podrá ver un resumen de órdenes pendientes, : Serán hechos a través de un simulador con tarjeta de crédito descargas permitidas (3 posibilidades de descarga por archivo), últimos archivos publicados, ganancias, total de descargas a sus archivos por otros usuarios etc. Opciones: Aquí el usuario podrá modificar clave, datos personales, entidad financiera (pagos), e información referente a archivos publicados. Cabe destacar que la nuestra aplicación es confiable puesto que contamos con un certificado digital avalizado por XXXXXXXXXXXXXXXX la cual es una empresa seria y junto al algoritmo de encriptación de clave brindamos seguridad a nuestros usuarios. VIII INDICE GENERAL AGRADECIMIENTO ............................................................................................. II DEDICATORIA .................................................................................................... III TRIBUNAL DE GRADUACIÓN .......................................................................... IV DECLARACIÓN EXPRESA ................................................................................ V RESUMEN .......................................................................................................... VI INDICE GENERAL ........................................................................................... VIII ÍNDICE DE GRÁFICOS .................................................................................... XVI ÍNDICE DE TABLAS ........................................................................................ XIX ABREVIATURA ................................................................................................. XX CAPITULO 1 ....................................................................................................... 21 1.1 Descripción del Problema identificado ................................................... 22 1.2 Solución que brinda nuestro proyecto.................................................... 23 1.3 Misión .................................................................................................... 24 1.4 Visión ..................................................................................................... 24 1.5 Objetivo General .................................................................................... 24 1.6 Alcances ................................................................................................ 26 IX 1.7 Arquitectura para la Aplicación Web. ..................................................... 30 1.7.1 Capa de servicios de presentación: ............................................... 31 1.7.2 Capa de servicios de Lógica de Negocio ...................................... 31 1.7.3 Capa de servicios de datos ........................................................... 32 1.8 Modelo de Desarrollo ............................................................................ 33 1.9 Metodología Orientada a Objeto ............................................................ 36 1.10 Recursos Tecnológicos........................................................................ 36 1.10.1 Recursos para el Desarrollo del Portal Web ................................ 36 1.10.2 Recursos para la Implementación del Portal Web........................ 37 1.11 Cronograma ........................................................................................ 39 CAPITULO 2 ....................................................................................................... 40 Análisis .............................................................................................................. 40 2.1.- Levantamiento de Información ............................................................ 40 2.1.1 A quien dirigimos nuestro proyecto ................................................ 41 2.1.2 Visitas............................................................................................. 41 2.1.3 Registro de Usuario........................................................................ 42 2.1.4 Manejo de Claves........................................................................... 42 2.1.5 Formato Permitido .......................................................................... 43 2.1.6 Acuerdo del Portal para publicar contenidos ................................ 44 2.1.7 Manejo del Contenido .................................................................... 45 X 2.1.8 Penalizaciones para el caso de contenidos perjudiciales para nuestro portal .......................................................................................... 46 2.1.9 Políticas de mantenimiento de contenido ....................................... 46 2.1.10 Tablas de Valores por el contenido levantado ............................. 47 2.1.11 Formas y políticas de pagos para Usuario-proveedor .................. 48 2.1.12 Forma de cobro para las descargas ............................................. 48 2.2 Políticas de Privacidad........................................................................... 49 2.2.1 Recolección de Datos Generales ................................................... 49 2.2.2 Seguridad ....................................................................................... 49 2.2.3 Menores de Edad ........................................................................... 50 2.2.4 Cambios ......................................................................................... 50 2.2.5 Otros Términos............................................................................... 50 2.2.6 Clave Personal ............................................................................... 51 2.3 Consola Administrativa .......................................................................... 51 2.3.2 Control de contenido ...................................................................... 52 2.3.3 Reporte de Pago de Usuario-proveedor......................................... 52 2.3.4 Actualización de pagos a los Usuarios-proveedores ...................... 52 2.3.5 Mantenimiento ................................................................................ 52 2.4 Diagrama de Casos de Uso ................................................................... 54 2.4.1 Registro de Usuario........................................................................ 54 XI 2.4.2 Orden Suscripción. ......................................................................... 55 2.4.3 Servicios del Portal......................................................................... 57 2.4.4 Consola Administrativa ................................................................... 60 2.5 Diagramas de Secuencia ....................................................................... 62 2.5.1 Registro Usuario............................................................................. 62 2.5.2 Orden Suscriptor ............................................................................ 63 2.5.3 Servicios del Portal......................................................................... 65 2.5.4 Consola de Administrador .............................................................. 68 2.6 Diagramas de Estado ............................................................................ 70 2.6.1 Registro Usuario............................................................................. 70 2.6.2 Activación de Cuenta ..................................................................... 71 2.6.3 Servicios del Portal......................................................................... 72 2.6.4 Consola Administrativa ................................................................... 74 2.7 Diagrama de Clases .............................................................................. 76 2.7.1 Portal Web ..................................................................................... 76 2.7.2 Simulación de Pagos...................................................................... 78 CAPITULO 3 ....................................................................................................... 80 DISEÑO .............................................................................................................. 80 3.1 Diseño de la Interfaz .............................................................................. 80 3.1.1 Pagina Principal del portal .............................................................. 81 XII 3.1.4 Mi cuenta ........................................................................................ 85 3.1.6 Publicación ..................................................................................... 91 3.1.7 Descargas ...................................................................................... 93 3.1.8 TOP ................................................................................................ 97 3.1.9 Categoría ....................................................................................... 99 3.1.10 Búsqueda ................................................................................... 100 3.2 Mapa del sitio Aquidescarga ................................................................ 101 3.3 Mapa de Navegación de Aquidescarga .............................................. 102 3.4 Consola Administrativa ....................................................................... 103 3.4 .1 Cuenta ......................................................................................... 103 3.4 .2 Mantenimiento de Contenido ...................................................... 104 3.4 .3 Mantenimientos ........................................................................... 105 3.4 .4 Mapa del Sitio ............................................................................ 106 3.4 .5 Navegación de Administración ................................................... 107 CAPITULO 4 ..................................................................................................... 108 CODIFICACION ................................................................................................ 108 4.1 Introducción ......................................................................................... 108 4.2 Definición de Estándares ..................................................................... 109 4.3 Base de Datos ..................................................................................... 109 4.3.1 Tablas .......................................................................................... 109 XIII 4.3.3 Tipos ............................................................................................ 117 4.4 Variables .............................................................................................. 117 4.5 Carpetas .............................................................................................. 118 4.6 Paginas principales .............................................................................. 120 4.6.1 PantillaHtml.Class. ....................................................................... 120 4.6.2 PantillaAdminHtml ........................................................................ 122 4.6.3 BarraMenu.Class.......................................................................... 123 4.6.4 CuadroHtml .................................................................................. 123 4.6.5 Funciones ..................................................................................... 123 4.6.6 Lib Inc........................................................................................... 124 4.6.7 VinculoUrl.Class ........................................................................... 124 4.6.8 Configuraciones ........................................................................... 124 4.7 Módulos ............................................................................................... 125 4.7.1 Subir Archivos .............................................................................. 125 4.7.2 Carrito de Compra ........................................................................ 125 4.7.3 Búsquedas ................................................................................... 126 4.7.4 Descargas ................................................................................... 126 CAPITULO 5 ..................................................................................................... 128 Pruebas ............................................................................................................ 128 5.1 Métricas que pudimos probar con los usuarios ................................... 129 XIV 5.1.1 Satisfacción del Cliente ................................................................ 129 5.1.2 Desempeño del sitio ..................................................................... 130 5.1.3 Tiempo promedio de permanencia en el sistema ......................... 131 CAPÍTULO 6 ..................................................................................................... 132 Recomendaciones y Conclusiones del Proyecto ........................................ 132 6.1.- Recomendaciones ........................................................................ 132 6.1.1.- Interfaz ....................................................................................... 133 6.1.2.- Hardware ................................................................................... 134 6.1.3.- Software ..................................................................................... 134 6.1.4.- Seguridades ............................................................................... 135 6.1.5.- Respaldos del Portal .................................................................. 136 6.1.6.- Conclusiones ............................................................................. 136 GLOSARIO DE TERMINOS ............................................................................. 139 GLOSARIO DE TERMINOS ............................................................................. 140 ANEXOS ........................................................................................................... 141 BIBLIOGRAFIA ................................................................................................ 147 Libros consultados: ........................................................................................ 147 XV Paginas Web consultadas:............................................................................. 147 XVI ÍNDICE DE GRÁFICOS Gráfico No.1 .1 Modelo de Desarrollo Espiral............................................................................... 35 Gráfico No.1.2 Cronograma de Actividades Resumido ................................................................ 39 Gráfico No.2.3 Diagrama de casos de uso ................................................................................... 54 Registro de Usuario ....................................................................................................................... 54 Gráfico No.2.4 Diagrama de casos de uso ................................................................................... 55 Orden Suscripción .......................................................................................................................... 55 Gráfico No.2.6 Diagrama de casos de uso .................................................................................... 60 Consola Administrativa .................................................................................................................. 60 Gráfico No.2.7 Diagrama de secuencia ........................................................................................ 62 Registro de Usuario ....................................................................................................................... 62 Gráfico No. 2.8 Diagrama de secuencia ....................................................................................... 63 Orden Suscriptor ............................................................................................................................ 63 Gráfico No.2.9 Diagrama de secuencia ........................................................................................ 65 Servicios de Portal ......................................................................................................................... 65 Consola Administrativa .................................................................................................................. 68 Gráfico No.2.11 Diagrama de estado ........................................................................................... 70 Registro Usuario ............................................................................................................................ 70 Gráfico No.2.12 Diagrama de estado ........................................................................................... 71 Activación de Cuenta ..................................................................................................................... 71 Servicios del Portal ........................................................................................................................ 72 Gráfico No.2.14 Diagrama de estado ........................................................................................... 74 Consola Administrativa .................................................................................................................. 74 Gráfico No.2.15 Diagrama de Clases Portal Web ........................................................................ 76 XVII Gráfico No.2.15a Diagrama de Clases Portal Web ...................................................................... 77 Gráfico No. 2.16 Diagrama de Clases ........................................................................................... 78 Simulador de Pagos ....................................................................................................................... 78 Gráfico No.3.17 Página Principal ................................................................................................... 81 Gráfico No.3.18 Registro de Usuario ............................................................................................ 83 Gráfico No.3.19 Mi Cuenta............................................................................................................ 85 3.1.5 Orden Suscripción. ................................................................................................................ 87 Gráfico No. 3. 20 Orden Suscripción ............................................................................................ 87 Gráfico No. 3.21 Ingreso de Datos Financieros ............................................................................ 89 Gráfico No. 3.22 Publicación.......................................................................................................... 91 Gráfico No. 3.23 Ítems a Descargar .............................................................................................. 93 Gráfico No. 3.24 Ingreso de Datos Financieros ........................................................................... 95 Gráfico No. 3.25 TOP .................................................................................................................... 97 Gráfico No. 3.26 Categorías .......................................................................................................... 99 Gráfico No. 3.28 Mapa de Navegación Aquidescarga ............................................................... 102 Gráfico No. 3.29 Iniciar Sesión del Administrador ....................................................................... 103 Gráfico No. 3.30 Control de Contenidos ...................................................................................... 104 Gráfico No. 3.31 Mantenimientos de Idioma............................................................................... 105 Gráfico No. 3.32 Mapa del Sitio Administrador ........................................................................... 106 Gráfico No. 3.33 Mapa de Navegación del Administrador ........................................................... 107 Gráfico No. 4.34 Definición de campo TBCA............................................................................. 112 Gráfico No. 4.35 Definición de campo TBCA............................................................................. 113 Gráfico No. 4.36 Definición de campo TBPV ............................................................................. 114 Gráfico No. 4.37 Definición de campo TBPV ............................................................................ 115 Gráfico No. 4.38 Definición de campo TBPP ............................................................................. 116 XVIII Gráfico No. 4.39 Plantilla del Portal ............................................................................................. 120 Gráfico No. 4. 40 Barra Menú ...................................................................................................... 120 Gráfico No. 4.41 Barra Menú Administrador ................................................................................ 122 XIX ÍNDICE DE TABLAS Tabla No. 4.1 Definición de tabla TBCA ........................................................ 109 Tabla No. 4.2 Definición de tabla TBPV ......................................................... 110 Tabla No. 4.3 Definición de tabla TBPP ......................................................... 111 XX ABREVIATURA DER.- Diagrama de Entidad de Relación. UML.- Lenguaje Unificado de Modelado HTML.- Lenguaje de Marcas de Hipertexto ISO.- Organización Internacional para la Estandarización MB.- Megabytes PDF Formato de Documento Portable PHP.- Hypertext Pre-processor CAPITULO 1 Ámbito Hoy en día la mayor parte de los portales Web nos permiten acceder a diferente tipo de información, que muchas veces puede ser por necesidad para el navegante y en otras ocasiones solo por entretenimiento, es por esta razón que hoy en día las organizaciones y personas han encontrado en este medio la manera de darse a conocer a nivel mundial. 22 Y así poder ganar mercado de manera local y mucho mejor de forma internacional. Porque la mayoría de los navegantes de Internet asisten a esta gran red en busca de información que satisfaga sus necesidades culturales, informativas, transaccionales, entretenimientos, aprendizajes etc. 1.1 Descripción del Problema identificado Actualmente en el país hemos visto un gran incremento de establecimientos que permite el acceso a Internet y por ende todo se vuelve más fácil al momento de manejar las herramientas de búsquedas que nos ofrece el Internet. Pero a pesar de contar con herramientas de búsquedas en esta gran red, aun existen dificultades dado que la búsqueda de información mucha de las veces es demasiado general. Y en otras ocasiones puede existir gran cantidad de información valiosa para algunos pero para otros sigue siendo una información que no cumple con la necesidad requerida dificultándose así su entendimiento y uso. Sin descuidar el tiempo que toma el recurso humano para obtener lo que busca. Puesto que no todo lo que esta publicado en Internet cumple las expectativas de los navegantes y si se encuentra primero debió haber navegado por largo tiempo visitado un sin numero de paginas y recién hay encontró lo que buscaba. 23 1.2 Solución que brinda nuestro proyecto En vista de estas necesidades nuestra propuesta es hacer un portal lo suficientemente vendedor, dedicado a la “Venta de Información”; bajo un modelo de negocio establecido es decir por suscripción, brindando de esta manera beneficios que merman los problemas de la población cibernautica; que con frecuencia usa esta herramienta tecnológica, para obtener servicios de publicación y descarga oportuna. Nuestro proyecto se basará en la venta de información por suscripción, donde el paso para poder ser miembro activo de nuestro portal, será registrarse con datos personales básicos que no comprometan su integridad financiera. Manejaremos dos tipos de usuario por una parte los que suben contenidos quienes para efectos del proyecto serán conocidos como Usuario-Proveedor y los que descargan contenidos los llamaremos usuarios. Cabe destacar que el proceso de Orden-Suscripción será necesario y obligatorio para las personas que requieren publicar contenidos, no así para aquellos usuario que solo navegan en busca de información. 24 Debemos tomar en cuenta que todo contenido publicado en nuestro Portal Web tendrá un precio fijado por el usuario-proveedor que subió ese contenido. 1.3 Misión Ser un centro de difusión que brinde la oportunidad de distribuir contenidos entre los navegantes y usuarios de nuestro portal, a un valor representativo para quien lo suba. 1.4 Visión Darnos a conocer como un portal que se dedica a la venta de información importante, donde todo contenido deberá de cumplir con los términos y condiciones del portal garantizando así un sitio seguro y de esta manera lograr que nuevas personas se registren y gocen de los beneficios que brinda nuestro sitio Web. 1.5 Objetivo General Crear un portal Web que permita a los navegantes del Internet registrarse para poder realizar publicaciones de contenidos y de ésta manera tanto él como otros usuarios registrados pueda realizar la respectiva búsqueda y posterior descarga de la información publicada en el portal. 25 Para ello se implementará un método de pago que será usado en la suscripción previa a la publicación y en la descarga de contenidos. 1.5.1 Objetivos Específicos 1 Permitir que los navegantes de Internet accedan a nuestro portal Web y de esta manera conozcan los servicios de Publicación y Descarga de contenidos disponibles. 2 Brindar seguridad en la encriptación de los datos manejados en el portal, tanto para el registro de usuarios, como para las transacciones financieras realizadas por los usuarios que utilizan los servicios de nuestro portal Web. 3 Autorizar la respectiva descarga de contenido luego de que halla efectuado la transacción financiera. 4 Permitir que el usuario-proveedor elija dentro de la categoría existente dónde colocar su contenido, para así poder manejar un mejor control de los archivos. 5 Brindar un informe de sus movimientos para que tenga un mejor control de los contenidos. 6 Mantener un control de todas las transacciones efectuadas por los usuarios dentro de nuestro portal. 26 1.6 Alcances Nuestra aplicación Web será desarrollada bajo el lenguaje de programación en PHP, HTML, JScript; los cuales soportan múltiples plataformas para que así los navegantes puedan acceder a nuestro sitio desde los diferentes browser. Las respectivas pruebas de funciónabilidad serán efectuadas en los siguientes navegadores: Internet Explorer, Mozilla, Netscape Navigator, Safari. Para el registro de usuario manejaremos un breve formulario, donde se receptaran los datos personales básicos del usuario como: Nombre, Apellidos, Correo electrónico, Nombre de usuario (Alias), Contraseña etc. El método de pago consistirá en llenar otro formulario breve, que receptara: Nombre, apellidos, tarjeta, número de tarjeta, código de tarjeta, fecha de expiración, país, ciudad, dirección, e-mail, teléfono. Aseguraremos la integridad de la contraseña por medio del algoritmo de encriptación MD5 de 128 bits para que nadie pueda descifrarla. Comprobaremos la validez del numero de la tarjeta de crédito, mediante el Algoritmo ISO 2894, pero este algoritmo no puede detectar si la tarjeta sigue siendo válida (no ha sido anulada, ha caducado, etc.) para esto nosotros revisaremos las posibles validaciones. 27 El algoritmo ISO 2894 trababa multiplicando cada numero de la tarjeta por dos, si es menor que nueve no se hace nada caso contrario le restamos nueve, luego sumamos todos los resultados y si el número que nos devuelve la suma es múltiplo de 10 y a la vez menor o igual a 150, es un número de tarjeta válido. Utilizaremos un certificado en nuestro portal Web para proporcionar la confianza necesaria a los usuarios y ellos a su vez puedan realizar transacciones financieras seguras en el sitio. Ver Anexo No. 1 Certificado Nuestro portal brindara una lista de opciones al usuario en la que podrá elegirá la categoría en donde va a subir el contenido que desee publicar. Listado de las Categorías existen en el Portal: 1 Redes 2 Linux 3 Servidores 4 Economía y negocios 5 Medicina y ciencia 6 Salud y dieta 7 Cocina y gastronomía 28 8 Programación 9 Ofimática 10 Informática. 11 Poesía 12 Cómics Para que el contenido pueda ser subido a nuestro portal debe pesar menos de 4MB y para que sea publicado de forma inmediata debe pesar menos de 2MG caso contrario primero será evaluado por el Administrador. Quien verificara que el contenido a publicar, cumpla con los términos y condiciones establecido dentro del portal. El tiempo estimado para que el administrador del sitio pueda evaluar el contenido a publicar será dentro de las 48 horas siguientes. De la misma forma el Administrador podrá rechazar cualquier producto publicado si este no cumple con los términos y condiciones, es decir que todo archivo que pese menos de 2MG también será monitorizado por el Administración. Enfocamos el servicio de publicación de contenidos a los usuarios del Internet que posean información digital, tales como manuales, folletos, tutoriales, libros. 29 Para brindar un mejor servicio de todo contenido publicado en el portal, el usuario-proveedor determinara el costo del contenido, cuyo valor será incrementado en un 20% por los servicios de descargar. Se manejara un estado de cuenta donde el usuario podrá visualizar: 1 Ordenes pendientes de pago 2 Descargas permitidas (5 días hábiles ó 3 descargas) 3 Últimos contenidos publicados 4 Sus últimas ganancias 5 Las descargas realizadas en el mes 6 El numero de recibo proporcionado por la entidad financiera para poder cobrar por las descargas efectuadas a sus contenidos en el presente mes. El servicio de descarga sólo estará disponible para aquellas personas que tengan capacidad legal para contratar. Por lo tanto, aquellos que no cumplan con esta condición deberán abstenerse de suministrar información personal para ser incluida en nuestras bases de datos. Sin embargo, pueden hacerlo a través de los padres o tutores. 30 Manejaremos transacciones financieras 1 En el caso que el usuario desee publicar contenidos. 2 Y para cuando deseen realizar descargas El proceso para realizar las transacciones financieras en nuestro portal Web será mediante un mecanismo de simulación que efectuara las validaciones básicas, para realizar la compra o el pago de suscripción. La Consola Administrativa será administrada por una persona capacitada, quien se encargara de monitorizar todos los archivos subidos a nuestro portal, así mismo será quien realice los mantenimientos a las tablas autorizadas, y llevara los distintos reportes que genera el portal para una mejor gestión y desarrollo de nuestro sitio. 1.7 Arquitectura para la Aplicación Web. Nuestro Portal Web será implementado en una Arquitectura de Presentación/Lógica de Negocio/Almacén de dato, mas conocida como tres capa. 31 1.7.1 Capa de servicios de presentación: En esta capa manejaremos los archivos que componen nuestro proyecto, de una forma ordenada mediante la utilización de carpetas o directorios, para un mejor mantenimiento (Técnico) a nuestro Portal. Las carpetas o directorios contendrán: 1 Código PHP 2 Pagina Principal (Plantilla) 3 Paginas Secundarias 4 Gráficos 5 Animaciones 6 Tmp 7 Jscript Gracias al esquema multiplataformas el usuario podrá acceder a nuestra aplicación desde los principales navegadores tales como Internet Explorer para Microsoft y Mozilla para Linux. 1.7.2 Capa de servicios de Lógica de Negocio Manejaremos transacciones a un nivel medio que guardar la integridad de nuestro portal. 32 Enumeraremos alguna de las transacciones que existirán en nuestra aplicación: 1 Realizaremos procesos para el ingreso de la información Básica de los usuarios. 2 Realizaremos procesos para el ingreso de la información correspondiente a la orden-suscripción de los usuarios para la publicación de los recursos. 3 Realizaremos procesos para la subida de contenidos que van hacer publicado en el Portal 4 Realizaremos procesos para el Movimiento de las descargas realizadas 5 Realizaremos procesos para los pagos realizados a los usuariosproveedores que han publicado contenidos. 6 Realizaremos procesos para la información de los cobros realizados a los usuarios que han descargado contenidos. 1.7.3 Capa de servicios de datos De acuerdo a los antecedentes, nuestro Portal Web manejar una Base de Datos MYSQL la cual contendrá todas las tablas relacionadas de 33 acuerdo a las necesidades de nuestro proyecto, en estas tablas guardaremos los siguientes registros: 1 Información básica de los usuarios 2 Información correspondiente a la orden-suscripción de los usuarios para la publicación de los recursos. 3 Información del contenido que va hacer publicado en el Portal 4 Movimiento de las descargas realizadas 5 Información de los pagos realizados a los usuarios-proveedores que han publicado contenidos. 6 Información de los cobros realizados a los usuarios que han descargado contenidos. 7 1.8 Modelo de Desarrollo Para el desarrollo de nuestro portal Web y la consola administrativa trabajaremos con el Modelo del ciclo de vida espiral por ser un modelo de proceso evolutivo confiable y recomendado. Las características mas destacadas encontramos: 1 Es un modelo evolutivo que combina el modelo clásico con el diseño de prototipos. 34 2 Incluye la etapa de análisis de riesgos. 3 Es ideal para crear productos con diferentes versiones mejoradas como se hace con el software moderno de microcomputadoras. 4 La ingeniería puede desarrollarse a través del ciclo de vida clásico o el de construcción de prototipos. El modelo en espiral se divide en un número de actividades estructurales. Generalmente, existen entre tres y seis regiones de tareas de las cuales destacamos: 1 Comunicación con el cliente: esta tarea es de vital importancia, es la base de todo nuestro proyecto puesto que aquí se sabrá el requerimiento de parte del usuario estableciendo así comunicación entre el desarrollador y el cliente. 2 Planificación: Con esta tarea se definen los recursos tantos informáticos y humanos, el tiempo y otras informaciones relacionadas con el proyecto. 3 Análisis de riesgos: Con esta tarea se evalúa los riesgos técnicos y otras informaciones relacionadas con el proyecto. 4 Ingeniería: Se toma en cuenta todo lo que hará falta o se requerirá para construcción de nuestro proyecto. 5 Construcción y adaptación: las tareas requeridas para construir, probar, instalar la aplicación administrativa y el portal elaborado. 35 6 Evaluación el cliente: las tareas requeridas para obtener la reacción del cliente según la evaluación de las representaciones del software creadas durante la etapa de ingeniería e implementación durante la etapa de instalación. Gráfico No.1 .1 Modelo de Desarrollo Espiral Cuando se comience con la construcción de nuestro proyecto nos guiaremos alrededor de la espiral en la dirección de las agujas del reloj, comenzando por el centro. El primer ciclo de la espiral producirá el desarrollo de una especificación de productos; los pasos siguientes en la espiral serán para desarrollar un prototipo y progresivamente versiones mas sofisticadas. Cada paso de la región de planificación producirá ajustes en nuestro proyecto. 36 1.9 Metodología Orientada a Objeto Luego de analizar varias metodologías decidimos usar para el desarrollo de Nuestro Portal Web y Consola Administrativa el lenguaje Unificado de Modelado UML Orientado a Objeto. 1.10 Recursos Tecnológicos 1.10.1 Recursos para el Desarrollo del Portal Web Para el desarrollo Portal se va a necesitar los siguientes recursos: Hardware 3 Computadores con las siguientes características: Hardware: Procesador P4 3.2 GHZ Mainboard: Intel Pentium Memoria: 512 GB RAM Disco Duro: 80 GB Monitores: Pantalla CDR Software Sistemas Operativos Windows Xp Windows 2003 Server Linux Fedora 37 Herramientas de Desarrollo Apache PHP MYSQL Dreamweaver 1.10.2 Recursos para la Implementación del Portal Web Hosting con las siguientes características: +===================================+ | New Account Info | +===================================+ | Domain: aquidescarga.com | | Ip: 75.126.144.181 (n) | | HasCgi: y | | UserName: Aquiles | | PassWord: ***** | | CpanelMod: x | | HomeRoot: /home | | Quota: 10000 Meg | | NameServer: ns1.websoftec.net | | Contact Email: [email protected]| | Package: websoft_Pymes | | Php 5 | | Mysql 5 | | Apache | +===================================+ Certificado Digital Ver Anexo No. 1 Certificado 38 Administración del Sitio por https: aquidescarga.com/cpanel, para una mejor apreciación del tema ver Tomo II Capitulo 2 Manual de Usuario. Presupuesto de funcionamiento de la aplicación Aquidescarga podrá ser visualizado. Anexo No.3 Presupuesto 1.10.3 Recurso Humano Para la elaboración del sitio se tomara en cuenta estos roles: 1 Jefe de Proyecto Srta. Diana Alava 2 Desarrolladores Sr. Carlos Orrala Sr. Freddy Cevallos Jefe del Proyecto.- Es la persona encargada de dirigir la elaboración del portal Web y la consola administrativa, será la persona quien tendrá la responsabilidad de cumplir que el proyecto se lo realice de la mejor manera para así cumplir con todas las expectativas. Desarrolladores.- Son las personas encargadas de la parte de implementación, diseño de pantallas, diseño grafico, codificación, edición, 39 escritor de textos para nuestro portal, así como los encargados de realizar los manuales tantos técnicos como de usuario. Cabe destacar que por factor tiempo la persona que esta como jefe de proyecto tendrá que realizar algunas de las tareas de desarrollador. 1.11 Cronograma Cronograma Resumido de Actividades (Parte 1) Portal de Venta de Informacion Personal Nombre de Tarea Elección del Proyecto Web Duracion Dias Comienzo Fin 1.00 19/04/2007 20/04/2007 Ajustes del Enfoque del Proyecto 32.00 20/04/2007 22/05/2007 Etapa de Análisis del Portal 28.00 22/05/2007 19/06/2007 Etapa de Diseño del Portal 20.00 19/06/2007 09/07/2007 Primera Sustentación 1.00 09/07/2007 09/07/2007 Etapa de Programación 71.00 15/07/2007 24/09/2007 Segunda Sustentación 1.00 24/09/2007 25/09/2007 Etapa de Programación 57.00 25/09/2007 21/11/2007 6.00 21/11/2007 27/11/2007 18.00 27/11/2007 15/12/2007 1.00 15/12/2007 15/12/2007 Etapa de Implementación Etapa de Prueba Entrega del proyecto Gráfico No.1.2 Cronograma de Actividades Resumido Adjuntamos cronograma resumido de actividades para la elaboración de nuestro proyecto. Para una mejor apreciación de las actividades favor dirigirse a los anexos, donde se encuentra detallado nuestro cronograma de actividades. Ver Anexo No. 2 Cronograma. CAPITULO 2 Análisis 2.1.- Levantamiento de Información AQUIDESCARGA es un lugar donde todas las personas pueden vender y comprar muchos tipos de información: como folletos, manuales técnicos, artículos importantes, libros, fotografías, códigos fuentes, etc. que serán monitorizados y categorizados para una mejor búsqueda. 41 Nuestro finalidad es la de distribuir contenido de forma segura que muchas veces es difícil de conseguir en portales gratuitos. 2.1.1 A quien dirigimos nuestro proyecto AQUIDESCARGA brindará el servicio a todos los navegadores de Internet, con mayor énfasis a: Los Estudiantes Universitarios, Profesionales, Compañías, Investigadores, Escritores, Mentalitas, Analistas, Diseñadores que por lo general son quienes constantemente realizan, proyectos universitarios, temas de tesis, códigos fuentes, libros, análisis de proyectos, investigaciones, pruebas, novelas, fotos etc. 2.1.2 Visitas Las Visitas pueden ser hechas por cualquier persona que gusta del Internet. Pero para poder publicar un contenido en nuestro sitio primero deberá conocer sobre los términos y condiciones en el Acuerdo del Portal. Y para descargar contenidos deberá tener una tarjeta de crédito valida que le permita realizar la compra. 42 2.1.3 Registro de Usuario AQUIDESCARGA ofrecerá un Formulario de Registro, que solicitara datos básicos del usuario. El navegante debe elegir un ID de Usuario y una Clave durante el proceso de registro, además deberá aceptar los términos y condiciones del sitio para poder terminar el proceso de registro. El usuario recibirá a su correo personal un e-mail de confirmación el cual contendrá un link que le permitirá activar la cuenta. 2.1.4 Manejo de Claves Los datos del usuario deben ser correctos y más que todo se recomienda que la cuenta de correo ingresada para el registro sea de Gmail o Yahoo, puesto que en las pruebas preliminares de envió de corres, no llegan a los servidores de Hotmail y Latinmail. Para que de esta manera podamos enviarle el e-mail de confirmación. Todo usuario dispondrá de un alias y clave personal que le permitirá publicar o descargar contenido. Esta clave debe mantenerla bajo absoluta confidencialidad y en ningún caso, deberá revelarla o compartirla con otras personas. 43 El usuario será el único responsable de todos los actos que tenga lugar su sesión. Si por cualquier razón un usuario creyera que alguien puede conocer su clave, deberá modificarla inmediatamente. Para las claves que se utilicen dentro de nuestro portal, estas deben de cumplir con un formato definido por el Administrador del sitio, las cuales pueden ser modificadas dentro de las opciones que tiene dicha persona. La clave esta formada por 3 distintos tipos de caracteres, los cuales son una combinación de letras (a-z), números (0-9) y símbolos especiales (.*/_) que en su total deben sumar 7 caracteres como mínimo. 2.1.5 Formato Permitido Todo Contenido que vaya a ser publicado en AQUIDESCARGA deberá ser propio del usuario y recibiremos contenidos solo en el siguiente formato: PDF (Formato de Documento Portátil) por ser un formato de almacenamiento de documentos. Debido a que es una extensión multiplataforma, y puede ser visualizado por los principales sistemas operativos (Windows, Unix/Linux), sin que se modifiquen ni el aspecto ni la estructura del documento original. 44 AQUIDESCARGA se reserva el derecho de negarse a publicar contenido que violen los términos y condiciones establecidos en el Acuerdo del Portal. Si la publicación de un contenido tuviere datos personales al momento de ser levantado en nuestro Portal Web, dichos datos será vendido junto con el contenido. 2.1.6 Acuerdo del Portal para publicar contenidos El usuario deberá realizar la transacción financiera correspondiente a la orden-suscripción, para que sus contenidos estén publicados todo el tiempo. Manejaremos 5 días de gracias para que pague la suscripción, es decir que todo contenido dejara de estar publicado al sexto día; Todo contenido que sea publicado en nuestro portal va a tener una numeración para llevar un control de los mismos; El usuario deberá describir un pequeño fragmento del contenido, que será publicado junto con el titulo, este requerimiento es importantes y obligatorio. 45 No debe contener material que sea ilegal, obsceno, difamatorio, pornográfico, indecente, lascivo, hostigante, amenazante, perjudicial, invasor de derechos de privacidad o publicidad, abusivo, incitante, o que fuera objetable de otro modo; No de incluir código malicioso como virus, caballos de Troya, gusanos, bombas de tiempo, mensajes de cancelación (cancelbots), o cualquier otra rutina de programación que pudiera dañar, interferir, interceptar en forma subrepticia, o expropiar un sistema, programa, datos, o información personal (incluyendo Datos Personales); Receta, fórmula que hagan daño a otra persona; AQUIDESCARGA a pesar de estas reglas no garantiza la precisión, integridad o calidad del contenido ya que las faltas ortográficas, errores semánticos entre otros errores gramaticales no corregimos. 2.1.7 Manejo del Contenido AQUIDESCARGA permitirá a todo usuario-proveedor publicar contenido de acuerdo a los términos y condiciones del portal, si la información pesa menos de 2MB será publicado automáticamente caso contrario será puesto a consideración del administrador, quien como parte de nuestro 46 sitio Web se reserva el derecho de inactivar cualquier material que crea inapropiado, ilegal, ofensivo, obscenos, pornográficos, etc. 2.1.8 Penalizaciones para el caso de contenidos perjudiciales para nuestro portal Como ya se conoce todo contenido superior de 2MB será evaluado por el administrador del sitio, es decir que él tendrá todo el derecho de no publicar o rechazar información que sobrepase nuestros Términos y Condiciones. 2.1.9 Políticas de mantenimiento de contenido Todo Contenido podrá estar Publicado en Nuestro Portal, si su dueño paga por una de las tarifas como por ejemplo la tarifa básica: Fecha Inicio (Orden suscripción) 15-06-2007 Fecha Fin Días de Gracias Fecha Fin Con días de gracias 15-07-2007 5 días 20-07-2007 47 Manejaremos 5 días de gracia para que el usuario-proveedor realice la transacción financiera correspondiente al siguiente mes, caso contrario el material publicado será deshabilitado del portal hasta que realice la transacción correspondiente. 2.1.10 Tablas de Valores por el contenido levantado El Usuario-proveedor determinara el valor de su contenido donde AQUIDESCARGA comisionara el 20% más del producto. Ejemplo: Producto cuesta USD $ 10.00 Usuario-proveedor Recibirá US$ 10.00 Portal Web Recibirá US$ 2.00 ------------------------Total que pagara el Usuario US$ 12.00 Para el usuario será transparente el valor a pagar puesto que a el no le interesa cuanto cobra el usuario-proveedor o cuanto gana la pagina. Entonces queda claro que el Usuario-proveedor ganara el 100% de su contenido y nosotros como portal Web ganaremos el 20 % más contenido por el servicio de descarga. del 48 2.1.11 Formas y políticas de pagos para Usuario-proveedor Los valores por contenidos vendidos aparecerán en su estado de cuenta. Para efecto de nuestro proyecto el Usuario-proveedor recibir sus pagos mediante giros por Western Unión En forma específica, antes de un plazo de 31 días luego de la finalización de un mes, AQUIDESCARGA realizará un esfuerzo de buena fe para pagar, utilizando la información de contacto en nuestros registros. Si a un usuario-proveedor le adeudáramos menos de $20 por ventas de contenidos dentro de un mes establecido, nos reservamos el derecho, a nuestro criterio, de trasladar sus ingresos al mes siguiente hasta alcanzar la suma de $20. Es su responsabilidad actualizar su información de contacto si la misma fuera modificada. 2.1.12 Forma de cobro para las descargas Para poder hacer descargas de contenido en el sitio, el usuario deberá realizar una transacción financiera por medio de una de tarjeta de crédito válida y solamente cuando el sistema de cobros haya determinado el correcto debito a la cuenta que este siendo utilizada se permitirá concluir con el proceso de descarga. 49 2.2 Políticas de Privacidad 2.2.1 Recolección de Datos Generales AQUIDESCARGA se compromete a proteger la privacidad de los usuarios y de sus websites. AQUIDESCARGA no se involucra en la práctica de venta o intercambio de datos personales con terceros para fines promociónales. AQUIDESCARGA solicita información personal como, por ejemplo, nombre, dirección, correo electrónico, contraseña, país e idioma. AQUIDESCARGA podrá entrar en contacto con usted para obtener información adicional necesaria para realizar los pagos. AQUIDESCARGA no proporcionará a terceros la información recibida sin autorización del usuario, excepto cuando sea necesaria para procesar o cubrir un pedido, caso en el que podrán ser divulgadas a bancos, instituciones financieras o compañías de tarjeta de crédito. 2.2.2 Seguridad AQUIDESCARGA usará la tecnología de encriptación cuando recolecte datos sensibles y claves personales como, por ejemplo, información sobre tarjeta de crédito. Para este caso usaremos medidas de seguridad disponibles como es el MD5 junto con un Certificado los cuales nos 50 permitirán garantizar la información sobre tarjeta de crédito, así como la información personal presentada como parte del proceso de compra. Ver Anexo No. 1 Certificado 2.2.3 Menores de Edad No podrá ser sometida información al presente Sitio por parte de menores de edad (conforme definición de la legislación local), sin el consentimiento de los padres o adulto responsable. Tampoco se permite que menores de edad efectúen compras o se involucren en otros actos legales en el presente Portal sin el referido consentimiento. 2.2.4 Cambios AQUIDESCARGA se reserva el derecho de cambiar las Políticas de Privacidad en cualquier momento por lo que se recomienda visitar las políticas dentro del portal. 2.2.5 Otros Términos El uso de este Portal está sujeto a los términos y condiciones presentados en las secciones "Acuerdo del Portal". Al acceder y utilizar el 51 Portal, usted acepta los términos y condiciones vigentes al momento de hacerlo, incluyendo esta Política de Privacidad. 2.2.6 Clave Personal Los usuarios dispondrán de una clave personal. Con ella podrán comprar, vender. Esta clave debe mantenerla bajo absoluta confidencialidad y, en ningún caso, deberás revelarla o compartirla con otras personas. 2.3 Consola Administrativa La consola administrativa será manejada por un Administrador quien: Evaluara todo contenido que se suba al portal Realizara los pagos a los usuarios-proveedores Tendrá acceso a los reportes Efectuará mantenimientos a las tablas autorizadas por la organización 2.3.1 Como ingresar a la consola administrativa Para el ingreso a la consola se digitara: Login : admin Password: administrador 52 2.3.2 Control de contenido La consola administrativa permitirá al Administrador verificar que no exista código malicioso o contenidos obscenos en los archivos publicados como en los archivos pendientes de los usuarios. Si llegara a encontrar contenido de ese tipo tendrá toda la autoridad para poder rechazarlo y quitarlo del portal 2.3.3 Reporte de Pago de Usuario-proveedor Se visualizar un reporte del total de descargas mensuales de los usuariosproveedores que han publicado su contenido en nuestro portal. 2.3.4 Actualización de pagos a los Usuarios-proveedores En esta opción realizara los pagos a los Usuario-proveedor por el total de las descargas a la fecha de corte. 2.3.5 Mantenimiento Esta sección permitirá realizar los correspondientes mantenimientos a las tablas: país, idioma, tarifa, p. visualización, motivo rechazo, categoría, documento y entidad. 53 Solo podrán realizarse modificaciones más no anulaciones de campo que estén siendo usados por algún registro existente. Los campos que no están siendo ocupados por ningún registro podrán ser puestos en esta inactivo y no serán mostrados en el portal. 54 2.4 Diagrama de Casos de Uso 2.4.1 Registro de Usuario Visitar Pagina * * * «uses» Portal Web Registrar en el Portal «extends» Confirmar por correo «extends» Guardar Datos * «extends» «uses» «extends» Activar Cuenta Llenar formulario Validar Datos Navegante Web Gráfico No.2.3 Diagrama de casos de uso Registro de Usuario Descripción del Caso de Uso - Registro de Usuario Toda persona deberá ingresar sus datos personales tales como: nombres, apellidos, alias, correo electrónico, contraseña, idioma, país, ciudad y teléfono; para poder crear una cuenta en nuestro Portal, estos datos serán validados; una ves que sea correctos se procederá a guardados en nuestra base de datos y le enviaremos un mail de confirmación para que pueda activar su cuenta. 55 2.4.2 Orden Suscripción. «uses» Logonear Registro Usuario «uses» Validar Contraseña «uses» Portal Web «uses» Orden Suscripcion Confirmación de Pago «uses» Validar Información Existente «uses» «uses» Simulador de Pago Usuario Guardar Datos de Pagos «extends» LLena Formalario Ingresar Datos Financieros Gráfico No.2.4 Diagrama de casos de uso Orden Suscripción Descripción del Caso de Uso - Orden Suscripción Una vez que el usuario se encuentra registrado y haya activado su cuenta podrá escoger la orden de suscripción que mejor le convenga para poder publicar sus contenidos. Esta orden de suscripción deberá ser pagada por medio de una tarjeta de crédito valida. 56 Para el pago de tarjetas de crédito manejares un pequeño simulador de pagos el cual verificara nombre, apellido, número de tarjeta, nombre tarjeta, código, fecha de vencimiento, país, dirección, teléfono, e-mail. Para efectos del proyecto solo validaremos número de tarjeta, código y fecha de vencimiento. 57 2.4.3 Servicios del Portal Registro Usuario Portal Web Validar Contraseña «extends» Administrador Portal «uses» Usuario Contenidos Mayores de 2MG Logonear «extends» «extends» «uses» «uses» Publicar Informacion «extends» Contenidos Pendientes «extends» «uses» Verificar Estado de Cuenta «extends» «extends» Enviar Contenido al Portal «extends» Contenidos Menores de 2MG «uses» Suscripcion Activa «extends» Presentar Información Guardar Registro Compra «extends» «uses» Existir información Simulador Pago Descargar Informacion «extends» Confirmación de Pago «extends» Efectivizar pago «extends» Guardar Registro Compra «extends» Envio de Autorizacion de Pago «extends» Confirmacion de fondos Gráfico No.2.5 Diagrama de casos de uso Servicios del Portal 58 Descripción del Caso de Uso - Servicios del Portal Todo usuario registrado podrá gozar de los beneficios que brinda nuestro portal. Publicar contenido.- Una ves que el usuario tenga una suscripción activa podrá cargar archivos en nuestro portal, estos archivos deberán ser subidos de acuerdo a la categoría que mejor se parezca, para que de esta manera los que quieran buscar información se les sea mas fácil su localización. De igual manera es recomendable que el usuario escriba un pequeño resumen de la información a subir para que así los navegantes puedan hacer la búsqueda de forma rápida. Mi canasta.- Le permitirá ver un detalle de los productos comprados. Código Descripción Cantidad Valor Total. Además la canasta tiene la opción de eliminar algún archivo que ya no desee comprar. Estado de Cuenta.- Aquí el usuario podrá visualizar: Ordenes de compras pendientes 59 Archivos que tiene para descarga Los cinco últimos contenidos publicados Ganancias del mes Ganancias de meses anteriores Numero de Transacción para cobrar por las descargas del mes 60 2.4.4 Consola Administrativa Usuario Portal Web «uses» Logonear «uses» Validar Contraseña Recepcion Contenidos «extends» «uses» «uses» «uses» Contenido Aprobado Evaluar Contenido Publica Contenido «uses» «uses» Contenido NO Aprobado «uses» «uses» «extends» Ver Estado de Cuenta por Suscriptor «extends» Guardar Registro Compra «uses» Actualizar Pagos a Suscriptores Registrar Pago Mantenimientos Gráfico No.2.6 Diagrama de casos de uso Consola Administrativa Publicar Contenidos 61 Descripción del Caso de Uso - Consola Administrativa La consola administrativa será manejada por un Administrador autorizado que tendrá la función de: Evaluar todo contenido publicado o pendiente por publicar. Visualizar los estados de cuentas por usuario Actualizar los Estados de Cuentas de los usuarios-proveedores Dar mantenimientos a las tablas autorizadas por la Organización 62 2.5 Diagramas de Secuencia 2.5.1 Registro Usuario Gráfico No.2.7 Diagrama de secuencia Registro de Usuario Descripción del Diagrama de Secuencia - Registro Usuario El navegante visita nuestra pagina y solicita registrarse, entonces el portal le visualiza un formulario para que digite sus datos personales, los cuales serán guardados en nuestra base de datos y le enviaremos un mail de confirmación a su correo personal. El navegante ingresara a su correo personal y confirmara el correo enviado por el portal, dando clic en la dirección enviada para que automáticamente se active su cuenta. 63 2.5.2 Orden Suscriptor Usuario Simulador de Pago Portal Web Visita Portal Levanta Página Página Principal Ingreso de Usuario y Contraseña Valida Información Inicio de Sesión o Advertencia Solicita Suscribirse para poder Publicar Levanta Formato Presenta Formulario Ingresa Datos al Formulario Envia Datos del Formulario Envia Confirmación del Dato Envia Confirmación del Dato Valida Datos Registra Datos y Registra Transacción Suscrpción Activa para Publicar Gráfico No. 2.8 Diagrama de secuencia Orden Suscriptor Descripción del Diagrama de Secuencia - Suscripción Activa para Publicar El usuario visita el portal e ingresa su ID de usuario y contraseña, el portal valida esta información al ser incorrecta envía una advertencia y si es correcta inicia la sesión del usuario. Luego el usuario solicita la suscripción para publicar, el portal le presenta un formulario para realizar la transacción una ves que esta información esta completa el portal la envía al Simulador de Pagos quien verifica la valides de los datos y de la transacción. 64 El Simulador de Pagos le envía una confirmación al Portal y este activa la suscripción si la confirmación fue efectiva sino envía una advertencia al usuario. 65 2.5.3 Servicios del Portal Suscripto Portal we Administrador Pago Visita Portal Levanta Página Página Principal Ingreso de Usuario y Contraseña Inicio de Sesión o Advertencia Valida Información Opción: Publicar Contenido Valida Suscripción Mensual Envia mensaje y/o Interface para envio de Contenido Selecciona el Contenido a Subir Envia Contenido al Portal Registra el Contenido Mayor a 2MB Menor a 2MB Evaluar Contenido Publica Contenido Publica Contenido Contenido Aprobado Contenido Negado No Publica Opción: Verificar estado de cuenta Levanta Interface de Estado de Cuenta Presenta Estado de Cuenta Portal Registra Descargas - Publicaciones Opcion: Descargar Contenido Presenta Menu de Contenidos Levanta Menu de Descargas Selecciona de Contenido a Descargar Envia Solicitud de Descarga Presenta Formulario para realizar pago Levanta Interface para el Pago Selecciona forma de pago Envia datos para el cobro Mensaje de la Transacción Descargando Contenido Envia datos del cobro Confirmación del Debito Guarda Registro de Compra Gráfico No.2.9 Diagrama de secuencia Servicios de Portal Valida Datos y/o Registra Debito 66 Descripción del Diagrama de Secuencia - Servicios del Portal El usuario visita el portal e ingresa su ID de usuario y contraseña, el portal valida esta información al ser incorrecta envía una advertencia y si es correcta inicia la sesión del usuario El usuario podrá dentro de su sesión: Publicar.- una ves que tenga suscripción activa el usuario podrá subir contenidos. Si el contenido recibido supera los 4MB será puesto como contenido pendiente caso contrario será publicado automáticamente pero en ambos casos será evaluado por el Administrador para poder ser publicado o rechazos. Estado de Cuenta.- EL usuario podrá ver su cuenta y así sabrá que contenido ha sido descargado en el Portal. Carrito de Compra.- El usuario seleccionara que contenido desea descargar en el Portal. El portal le presenta un formulario para realizar la transacción una ves que esta información esta completa el portal la envía al Simulador de Pagos quien verifica la valides de los datos y la transacción. 67 El Simulador de Pagos le envía una confirmación al Portal y este registra la compra y procede la descarga envía una advertencia al usuario. si la confirmación fue efectiva sino 68 2.5.4 Consola del Administrador Administrador Servidor del Portal Solicita Consola Presenta Consola Administrativa Levanta Consola Administrativa Ingreso de Usuario y Contraseña Inicio de Sesión o Advertencia Valida Información Opción: Evaluar Contenido Visualiza Contenidos Recientes Levantar Interface de Contenidos Recientes Evalua Contenidos Recientes No cumple con los Terminos y Condiciones Si cumple con los Terminos y Condiciones Autoriza la Publicación de Contenidos Opcion: Publica Contenido Solicita Información de descarga por Suscriptor Registro de Descargas Visualiza la informacion de descarga por Suscriptor Opcion: Levanta Reporte Actualizar Pagos Visualiza Actualizacion de Pagos Levanta Interface de Actualización de Pago Ingresa a los Suscriptores el pago Estados de Cuentas Actualizadas Opcion: Registra el Pago Mantenimientos Realiza Mantenimientos Autorizados Levantar Interface de Mantenimientos Actualiza Tablas Vizualización de Tablas Gráfico No.2.10 Diagrama de secuencia Consola Administrativa 69 Descripción del Diagrama de Secuencia - Consola del Administrador El Administrador ingresara su ID de Administrador y contraseña, el portal validara esta información al ser incorrecta envía una advertencia y si es correcta inicia la sesión del administrador quien se encargara de: Revisar los contenidos que es encuentren pendientes para publicar, así mismo revisará los publicados por si no han faltado a los términos y condiciones del portal. Visualizar los estados de cuentas por usuario para ver a quienes se les pagara por descargas realizadas a sus contenidos en el cada mes. Actualizar mensuales. los estados de cuentas correspondientes a los pagos 70 2.6 Diagramas de Estado 2.6.1 Registro Usuario [Ingresar a Nuestro Portal] [Llenar Formulario] Ingresando Datos Para Registrarse Visualizacion Políticas y Condiciones del Portal [Aceptar Políticas] [Comprar Datos / Datos Incorrectos] [Enviar e-mail para confirmación] Recibir Información [Comparar Datos / Datos Correctos] Validando Datos Gráfico No.2.11 Diagrama de estado Registro Usuario Descripción de Diagrama de Estado - Registro Usuario El navegante para pertenecer a nuestro Portal Web deberá registrarse, donde primero conocerá de nuestras políticas y condiciones las misma que aceptara para poder seguir con el proceso, si la información es correcta será guardada en la base da datos si es incorrecta tendrá que volver a digitar datos validos. 71 2.6.2 Activación de Cuenta [Ingresar al Correo Personal] [Abrir Correo] Recibiendo Correo de Confirmación Direccionando a nuestro Portal Web [Aceptar Políticas] [Enviar e-mail para confirmación] Activando Cuenta Gráfico No.2.12 Diagrama de estado Activación de Cuenta Descripción de Diagrama de Estado – Activación de Cuenta El usuario recibirá un e-mail de confirmación a su correo personal, al momento que el de clic en la dirección adjunta en el correo, automáticamente se activará la cuenta. 72 2.6.3 Servicios del Portal [Ingresar a Nuestro Portal] [Ingresar Usuario y Contraseña] [Comparar Usuario Usuario Correcto] Ingresando Datos Validando Usuario Seleccionado Opción [Comparar Usuario Usuario Incorrecto] [Descargar Contenido] [Publicar Contenido] [Evaluar Suscripcion] Validando Suscripción [Ingresar # Tarjeta] Ingresa Datos Financieros SIMULADOR DE PAGOS [Comprarar Datos Datos Financieros Incorrectos] [Suscripción Valida] [Comparar Datos Datos Financieros [Ver Correctos] Estado de Cuenta] [Suscripción Valida] Seleccionar Contenido a Subir Activando Suscripción [Enviar Contenido] Guardar Contenido [Visualizar Registro de la Compra] Seleccionar Contenido Bajando Contenido Seleccionado [Visualizar Valor a Pagar] [Visualizar Estado de Cuenta] Generando Estado de Cuenta [Descargar] Guardando Registro de la Compra Aceptando Valor de Compra [Comparar Datos Datos Financieros Correctos] [Realizar Pago de la compra] [Ingresar # Tarjeta] Ingresando Datos Financieros SIMULADOR DE PAGOS [Comparar Datos Datos Financieros Incorrectos] Gráfico No.2.13 Diagrama de estado Servicios del Portal 73 Descripción del Diagrama de Estado - Servicios del Portal El usuario para acceder a los servicios del portal deberá ingresar su alias y contraseña, una vez validado los datos podrá seleccionar que desea hacer: Si va por la opción de publicar contenidos al portal, deberá primero realizar la transacción financiera de la suscripción. Una vez validada esta suscripción el usuario podrá elegir que subir al portal. Si elige descargar contenidos del portal primero deberá seleccionar que desea bajar y luego realizará la transacción financiera correspondiente para efectuar la descarga. Todo usuario podrá ver su estado de cuenta, el cual presentará un listado de ordenes pendientes, contenidos por descargas, últimos publicados, ganancias del meses, ganancias de meses anteriores, numero de transacción para realizar el cobro por las descargas. 74 2.6.4 Consola Administrativa [Ingresar Usuario y Contraseña] [Ingresar a Consola Administrativa] Ingresando Datos [Comparar Administrador Usuario Correcto] Validando Administrador Seleccionado Opción [Comparar Administrador Usuario Incorrecto] [Mantenimientos] [Ver Estado de Cuenta por Suscriptor] [Controlar Contenido] [Elegir Contenido] Validando Contenido Evaluar Contenido [Reprobar Contenido] [Aprobar Contenido] Guardando Doc. para Publicar [Publicar] [Generar Reporte] Visualizar E/C por usuario Guardando Doc. Rechazado [Controlar Pagos] [Proceso Concluido] [Visualizar Reporte Estado de Cuenta [Visualizar Reporte por Usuario] de los pagos a los usuarios-proveedores] Presentando Reporte de E/C por usuario [Vizualizar Mantenimientos] Registrando Pagos a las cuentas de los usuarios Ejecutar los Mantenimientos [Seleccionar Usuario a Pagar ] Visualizando Usuarios Gráfico No.2.14 Diagrama de estado Consola Administrativa 75 Descripción de Diagrama de Estado - Consola Administrativa La consola administrativa será manejada por un usuario autorizado que tendrá la función de: Evaluar todo contenido que va a ser publicado en nuestro portal y guardar un registro donde determinara que se publica y que no se publica. Visualizar los estados de cuentas por usuario para ver a quienes se les acreditara por descargas realizadas a sus contenidos en el mes. Actualizar los Estados de Cuentas correspondiente a los pagos mensuales. Realizar los mantenimientos requeridos por la Organización. 76 2.7 Diagrama de Clases 2.7.1 Portal Web Gráfico No.2.15 Diagrama de Clases Portal Web 77 Gráfico No.2.15a Diagrama de Clases Portal Web 78 Descripción del diagrama de clase – Porta Web. Luego de haber desarrollado nuestros diagramas de casos de uso y los diagramas de secuencia pudimos determinar los distintos tipos de tablas: Tbca Tablas del Control de Administración Tbpv Tablas del Portal de Venta Tbpp Tablas del Portal de Pagos 2.7.2 Simulación de Pagos Gráfico No. 2.16 Diagrama de Clases Simulador de Pagos 79 Descripción del diagrama de clase – Simulación de Pagos Manejaremos un simulador de pagos, que controlara la valides del numero de la tarjeta de crédito a través del Algoritmo ISO 2894, adicional a esto validaremos la fecha de vencimiento y la clave de seguridad. Para nuestro proyecto la clave de seguridad deberá coincidir con los tres últimos dígitos de la tarjeta. El Simulador de Pagos solo maneja dos tablas: Tbpp Tablas de Portal de Pagos 1 Datos financieros 2 Movimientos Financieros. CAPITULO 3 DISEÑO 3.1 Diseño de la Interfaz Luego de dar clic en www.aquidescarga.com se cargara nuestro Portal, el cual ofrecerá un lugar seguro, serio y agradable para personas de todas las edades y tendencias." 81 3.1.1 Pagina Principal del portal Gráfico No.3.17 Página Principal 82 Esta es la plantilla principal de nuestro sitio en la cual se puede apreciar los distintos servicios que aquí se ofrecen como: Una barra menú que le permitirá desplazarse a la opción que busca, a sus laterales tendrá secciones como: 1 TOP 2 Últimos Publicados 3 Categorías, 4 Búsquedas 5 Iniciar sesión. En el centro de la plantilla encontraremos las ofertas del mes, el link para visualizar todas las categorías, y las seis categorías mas descargadas. Y en la parte inferior de la página encontraremos los link que rigen el portal. 83 3.1.2 Registro de Usuario Gráfico No.3.18 Registro de Usuario 84 Esta sección permite el registro de nuevos usuarios al portal, quienes deberán ingresar datos personales como: nombre, apellido, contraseña, e-mail, idioma, país, ciudad, teléfono; cabe destacar que la cuenta de email debe de existir puesto que mediante este medio se van a realizar diferentes notificaciones del portal hacia el usuario. Con la cuenta activa se podrá realizar publicaciones y descargas del contenido. 85 3.1.4 Mi cuenta Gráfico No.3.19 Mi Cuenta 86 Esta sección del portal es la que permite al usuario visualizar el contenido que ha publicado, el número de descargas pendientes, ordenes pendientes, las ganancias obtenidas, etc. 87 3.1.5 Orden Suscripción. Gráfico No. 3. 20 Orden Suscripción 88 Esta sección se encarga de mostrarle al usuario una tabla con las diferentes suscripciones para que el elija la que mejor le convenga y de esta manera tenga activada una suscripción para poder publicar. 89 Ingreso de Datos Financieros Gráfico No. 3.21 Ingreso de Datos Financieros 90 Luego de haber aceptados que tarifa suscripción prefiere, se procederá a ingresar los datos para efectuar el pago, estos datos serán enviados al simulador de pagos quien nos enviará una autorización para permitir publicar. 91 3.1.6 Publicación Gráfico No. 3.22 Publicación 92 Uno de los servicios principales del portal es la publicación de contenido aquí el usuario podrá subir un contenido de tipo PDF, junto con su titulo, valor y descripción breve. Mientras que el contenido resumen será un documento opcional para subir, este documento contendrá un pequeño resumen del contenido principal el cual podrá ser visualizado de forma libre por quien desea comprar dicho contenido. Todo contenido que pesare menos de 2MB será publicado de inmediato pero de igual manera será evaluado por el administrador para evitar violación a los términos y condiciones del portal. Y todos los archivos que estén entre mayores de 2MB y menores de 4MB serán guardados con estado pendiente hasta que el Administrador los revise y autorice su publicación. 93 3.1.7 Descargas Gráfico No. 3.23 Ítems a Descargar 94 Esta sección del portal es la que permite realizar la descarga de contenidos a usuarios registrados. Para poder descargar contenido deberá ir agregando al carro de compra el contenido que desea descargar, al final se presentara el detalle del carro de compra para su respetiva verificación o aceptación. 95 Ingreso de Datos Financieros Gráfico No. 3.24 Ingreso de Datos Financieros 96 Luego de haber aceptados los ítems del carro de compra, se procederá a ingresar los datos para efectuar el pago, estos datos serán enviados al simulador de pagos permitir la descarga. quien nos enviara una autorización para poder 97 3.1.8 TOP Gráfico No. 3.25 TOP 98 Esta sección muestra los contenidos que han tenido mayor número de descarga a la fecha actual este TOP puede aumenta o disminuir su presentación dependiente la opción que determine el Administrador del portal 99 3.1.9 Categoría Gráfico No. 3.26 Categorías 100 Esta sección muestra todas las categorías existentes en el portal, aquí el usuario escoge cual desea ver y da clic para que pueda luego visualizar solo los contenidos de esa categoría. 3.1.10 Búsqueda Esta sección permitirá al usuario escribir una referencia de lo que busca, esta referencia será comparada con el resumen breve y el título del contenido, si existe alguna coincidencia será mostrada dicho contenido al usuario. 101 3.2 Mapa del sitio Aquidescarga PAGINA PRINCIPAL PUBLICAR SESION O CUENTA DESCAR GAR TOP CATEGO RIAS ULTIMOS PUBLICADOS PRINCIPAL QUIENES SOMOS SELECCIONA R CATEGORIA MOSTRAR ESTADOS: CARGAR PAGOS DESCARGAR SELECCIO NAR CONTENI DO TOP DE LOS CONTENIDOS MÁS VENDIDOS MOSTRAR CATEGO RIAS EXISTEN TES MOSTRAR CONTENIDO DE LAS ÚLTIMAS PUBLICACION ES INICIAR SESION ACERCA DE NOSOTROS FORMULARIO AÑADIR CONTENIDOS ACTUALIZA CION DATOS PERSONALES VERIFICAR DATOS FINACIE ROS VER MAS INFORMA CIÓN DE UN CONTENIDO VER MÁS INFORMA CIÓN DE UN CONTENID O VER MAS INFORMA CIÓN DE UN CONTENIDO CATEGO RIAS AVISO LEGAL MODIFICAR CLAVE EJECUCION DE PAGO TOP POLITICAS DE PRIVASI DAD REGISTRO MODIFICAR ENTIDAD BUSQUEDA MODIFICAR ARCHIVO FORMULA RIO DE COMENTA RIOS Gráfico No. 3.27 Mapa de Aquidescarga 102 3.3 Mapa de Navegación de Aquidescarga Gráfico No. 3.28 Mapa de Navegación Aquidescarga 103 3.4 Consola Administrativa Con esta consola administrativa podremos tener control de nuestro portal tanto en el contenido como en las estadísticas que generen, que serán mostrados en reportes. Adicionalmente podrá registrar los pagos realizados. 3.4 .1 Cuenta Gráfico No. 3.29 Iniciar Sesión del Administrador 104 Esta opción permitirá al administrador ingresar su usuario y password para autenticarse; así darle las opciones necesarias administración del portal. 3.4 .2 Mantenimiento de Contenido Gráfico No. 3.30 Control de Contenidos para la 105 El control de contenido va a permitir al administrador tener la facultad de aprobar o denegar el contenido que va a ser publicado en el portal, siempre que cumpla con el acuerdo del sitio. 3.4 .3 Mantenimientos Gráfico No. 3.31 Mantenimientos de Idioma 106 Se efectuaran mantenimientos a las tablas autorizadas por la organización, solo podrán ser puestas en estado inactivo cuando no estén siendo usadas por ningún registro en la base. 3.4 .4 Mapa del Sitio PAGINA PRINCIPAL LOGONEAR CPNTROL DE CONTENIDOS CONTROL POR CATEGORIA CONTENIDOS PUBLICADOS REPORTE DE DESCARGA RS POR SUSCRIPTO R PAGOS MANTENI MIENTOS MANTENI MIENTO PAIS MANTENI MIENTO TARJETA MANTENI MIENTO PAR VISUALIZA CION MANTENI MIENTO ENTIDAD FINANCIER A MANTENI MIENTO CATEGORIA CONTENIDOS PENDIENTES MANTENI MIENTO IDIOMA MANTENI MIENTO MOTIVO RECHAZO Gráfico No. 3.32 Mapa del Sitio Administrador MANTENI MIENTO DOCUMENT O 107 3.4 .5 Navegación de Administración MAPA DE NAVEGACION Gráfico No. 3.33 Mapa de Navegación del Administrador CAPITULO 4 CODIFICACION 4.1 Introducción En esta etapa se mostrara la manera como se debería configura un servidor Web, adecuada a las necesidades de nuestro portal, el cual incluirá instalaciones, configuración, y posteriormente los estándares utilizados tanto en el código fuente como en la base de datos. 109 4.2 Definición de Estándares Un sitio basado en estándares es compatible con todos los navegadores actuales, y lo será con versiones futuras. Un sitio basado en estándares es más fácil de mantener y actualizar, el código es más simple, de esta forma se elimina la dependencia de un solo desarrollador. Para lo cual Aquidescarga maneja los siguientes estándares en su desarrollo: 4.3 Base de Datos Creación de la Base de Datos. La Base de Datos esta creada en MySql Server Versión 5.0.27 basada en el Modelo Entidad Relación (DER) y conformada por tres grupos de tablas. 4.3.1 Tablas Están tablas se definen de las siguiente manera tbca SIGLAS DEFINICION tb Tabla c control a administracion Tabla No. 4.1 Definición de tabla TBCA 110 Las tbca pertenecen al grupo de tablas que tienen que ver con la administración de nuestro sitio Web, las misma que administran dos aplicaciones, una para los usuario de portal y otra para el administrador de contenidos. Las tbca solo podrán ser modificadas con relación a su ubicación por parte del programador al momento del desarrollo, mas no tienen opción de mantenimientos. tbpv SIGLAS DEFINICION tb Tabla p portal v venta Tabla No. 4.2 Definición de tabla TBPV Las tbpv son todas las tablas que tiene que ver con la funcionabilidad del giro del negocio. Aquí existirán tablas que para poder realizar pruebas en el proyecto deben ser llenadas por los programadores como son: año, mes, idioma, país, entidad, categorías, motivo _ rechazo, tarifa etc. El resto de tablas que tiene esta misma nomenclatura serán llenas al momento que se realicen los receptivos procesos. 111 tbca SIGLAS DEFINICION tb Tabla p portal p pago Tabla No. 4. 3 Definición de tabla TBPP Las tbpp corresponden al simulador de pagos que para efectos de nuestro proyecto solo serán dos tablas. La tbpp_datos_financieros se encargara de captura los datos financieros del usuario y así mismo realizar las validaciones correspondientes a nuestros alcances. Luego de la validación los datos serán guardados en la tbpp_mov_financiero quien simular un número de autorización que será enviado al portal para poder concluir la transacción financiera. Y de esta manera puedan realizar la compra. La nomenclatura seguida de tbpv_xxxxx corresponde a la acción que se va a ejecutar en nuestro portal. Ejemplo: tbpv_tarifa_suscritor 112 tarifa _ suscriptor: esta tabla registrara datos al momento que un usuario elija que suscripción desea para poder publicar contenidos en el portal. 4.3.2 Campos De la misma manera que tenemos tres grupos de tablas, también tenemos tres grupos de campos. Para las tbca todo campo empezara con la letra c seguido de dos letras que si se hace referencia a una solo palabra entonces son las dos primeras letras de la palabra, si se hace referencia a dos palabras entonces las dos letras estarán formadas por la primera letra de cada palabra. Ejemplo: A) Gráfico No. 4.34 Definición de campo TBCA La tabla tbca_ubic_opcion esta compuesta por dos palabras después de la palabra estándar tbca. 113 Entonces para mantener un estándar determinamos que las tres letras deben estar formada por: c corresponde a las tablas de Control de Administración u corresponde a la primera letra de la palabra ubic o corresponde a la primera letra de la palabra opción _ corresponde a la separación xxxxx corresponde a campo que se hará referencia Ej.: (código) B) Gráfico No. 4.35 Definición de campo TBCA La tabla tbca_aplicacion esta compuesta por una palabra después de la palabra estándar tbca. Entonces para mantener un estándar determinamos que las tres letras deben estar formada por: c corresponde a las tablas de Control de Administración a corresponde a la primera letra de la palabra aplicación p corresponde a la segunda letra de la palabra aplicación _ corresponde a la separación 114 xxxxx corresponde a campo que se hará referencia Ej.: (código) Para las tbpv todo campo empezara con la letra w seguido de dos letras que si se hace referencia a una solo palabra entonces son las dos primeras letras de la palabra, si se hace referencia a dos palabras entonces las dos letras estarán formadas por la primera letra de cada palabra. Ejemplo: A) Gráfico No. 4.36 Definición de campo TBPV La tabla tbpv_detalle_descarga esta compuesta por dos palabras después de la palabra estándar tbpv. Entonces para mantener un estándar determinamos que las tres letras deben estar formada por: w corresponde a las tablas de Portal de Venta d corresponde a la primera letra de la palabra detalle d corresponde a la primera letra de la palabra descarga 115 _ corresponde a la separación xxxxx corresponde a campo que se hará referencia Ej.: (código) B) Gráfico No. 4.37 Definición de campo TBPV La tabla tbpv_descarga esta compuesta por una palabra después de la palabra estándar tbca. Entonces para mantener un estándar determinamos que las tres letras deben estar formada por: w corresponde a las tablas de Portal de Venta d corresponde a la primera letra de la palabra descarga e corresponde a la segunda letra de la palabra descarga _ corresponde a la separación xxxxx corresponde a campo que se hará referencia Ej.: (código) Para las tbpp todo campo empezara con la letra p seguido de dos letras que si se hace referencia a una solo palabra entonces son las 116 dos primeras letras de la palabra, si se hace referencia a dos palabras entonces las dos letras estarán formadas por la primera letra de cada palabra. Ejemplo: A) Gráfico No. 4.38 Definición de campo TBPP La tabla tbpp_datos_financiero esta compuesta por dos palabras después de la palabra estándar tbpv. Entonces para mantener un estándar determinamos que las tres letras deben estar formada por: p corresponde a las tablas de Portal de Venta d corresponde a la primera letra de la palabra datos f corresponde a la primera letra de la palabra financiero _ corresponde a la separación xxxxx corresponde (código) a campo que se hará referencia Ej.: 117 4.3.3 Tipos Los tipos de datos usados en las tablas están determinados de acuerdo a las necesidades de cada una. 4.4 Variables Estas clases son instanciadas en las páginas php con los siguientes estándares: Si vamos a instancia a la clase cls_xxxx la variable que recibe esta instancia se debe de escribir de la siguiente manera: $myxxxx Si vamos a instancia a la clase cls_tranxxxx la variable que recibe esta instancia se debe de escribir de la siguiente manera:$mytranxxxx. Si vamos a instancia a la clase cls_sqlxxxx la variable que recibe esta instancia se debe de escribir de la siguiente manera: $mysqlxxxx De esta manera podemos llevar un control de los variables instanciadas tanto en las páginas php como es las respectivas clases. Para asignar las url usamos la variable $url en todo nuestro proyecto. Ejemplo: $url= "<a href=".config_live_site."/orden.php>Realizar_Compra</a>"; Para desplayar una imagen usamos la variable $imagen en todo el proyecto Ejemplo: $imagen = "<img src='img/cart.png' width='15' height='15' border='0'>"; 118 Además usamos las variables $array y $ok para crear un objete de tipo array y un bandera de tipo entero que nos permiten hacer consulta y luego podemos preguntar por estar variables. En el caso de la variable $ok si es 1 o es 2 En el caso de la variable $array podemos retornar un arreglo y podemos presentarlo con la misma variable. Ejemplo: $mytranentidad->consulta_entidad($this->array,$this->ok); Para mostrar los cuadros usamos variable $mybox que se encarga de agregar todos los campos a presentar en una pantalla. Si necesitamos usar variables adiciones las colocamos al inicio de casa clase php y la usamos de forma independiente y se las define: var_xxxxxx, pero esto es muy poco. Para mensaje cortos que no son invocados con frecuencia se declaran antes de ser utilizados y se referirá a una variable: $mensajex. 4.5 Carpetas Para una mejor organización de los archivos tenemos dentro del Aquidescarga un grupo de carpetas que realizan funciones especificas que a continuación detallaremos lo que contiene cada una de estas carpetas 119 Img.- Contiene todas las imágenes de nuestro portal principalmente las imágenes que corresponde a cada categoría, además aloja a todos los pequeños iconos que usamos para los botones y las url. Jscript.- Contiene todo el código java que nos permite hacer las validaciones requeridas en nuestro portal. Las mantenemos separas de las demás porque estas se ejecutan en el cliente. Tmp.- Contiene subcarpetas por categorías creadas en el portal y además contienes dentro de estas subcarpetas otras dos subcarpetas mas donde se guarda el archivo principal y el archivo resumen aquidescarga\tmp\Redes\archivo Archivo Principal aquidescarga\tmp\Redes\resumen Archivo Resumen (opcional) Lib.- Contiene la carpeta Clases y las paginas php más importantes de nuestro proyecto mas adelante hablaremos de cada una de estas páginas. Clases Nuestro portal Web esta orientado a objetos es por tal razón que manejamos una carpeta donde se encuentran todas nuestras clases y cada clase esta compuesta de tres archivos. 1. Las cls_xxx corresponden a la creación de los objetos con sus respectivos tipos de datos. 2. Las cls_transxxx corresponden a las transacciones que se ejecutan en nuestro portal. 120 3. Las cls_sqlxxx corresponden a la ejecución de sentencias SQL que requiere nuestro portal. Ejemplo: cls_categoria cls_transcategoria cls_sqlcategoria 4.6 Paginas principales 4.6.1 PantillaHtml.Class. Corresponde a la Plantilla principal de nuestro proyecto esta compuesto por un cuerpo Html que llama a las siguientes funciones: Gráfico No. 4.39 Plantilla del Portal BarraMenu.- Esta función presenta el menú de opciones con que cuenta el portal, para una mejor navegabilidad de los usuarios. Gráfico No. 4. 40 Barra Menú 121 SeccionSuperiorMostrarHtml: Esta función se encarga de mostrar el Inicio de Sección para que de una manera el usuario tenga o un acceso más rápido a su cuenta. SeccionIzquierdaMostrarHtml: Esta función en cambio se encarga de mostrar de forma separada los vínculos a: 1. Los TOP contenidos mas vendidos en nuestro portal 2. Los Últimos Publicados para que así conozcan de lo nuevo que contiene el portal. 3. Una búsqueda a los títulos y a los resúmenes breves de los contenidos subidos en nuestro portal independientemente de la categoría que pertenezca. 4. Mostrara link a las categorías que tengan mas contenidos subidos, de esta manera el usuario sabrá que categoría es la mas visitas. SeccionCentroMostrarHtml.- Esta función es la importante de nuestra aplicación por que aquí se ejecutaran todas las peticiones (subir archivos y descarga archivos), transacciones, consultas, comentarios, mantenimientos y demás funciónabilidad de nuestro proyecto. Es decir aquí es donde se reflejara todo lo que hace nuestra aplicación. SeccionInferiorMostrarHtml.- Esta función se encarga de presenta los link acerca de nosotros, como de las políticas de privacidad y los acuerdos de portal. 122 Estas páginas deberán ser leídas detenidamente por los navegantes de Internet, por que toda infracción que se comenta no será responsabilidad de nuestra organización. Por que al esta en un ambiente Web nuestro negocio se vuelve un actividad de buena fe entre los usuarios que publican y nosotros. 4.6.2 PantillaAdminHtml Corresponde a la Plantilla del Administrador y esta compuesta las siguientes funciones: BarraMenu.- Esta función presenta el menú de opciones con que cuenta el Administrado de nuestro proyecto. Gráfico No. 4.41 Barra Menú Administrador SeccionSuperiorMostrarHtml: Esta función se encarga de mostrar el link de Inicio de Sección para el Administrado. SeccionIzquierdaMostrarHtml: Esta función en cambio se encarga de mostrar de forma separada los vínculos a: 1. Mantenimientos de las tablas que pueden modificar datos e inactivar registros. 123 2. Reportes de las pagos y reportes de las cuentas de los suscriptores. SeccionSuperiorCentroMostrarHtml: Esta función permitirá dependiendo de la petición poder hacer búsquedas de algo mas especifico como crea nuevos registros. SeccionCentroMostrarHtml.- Esta función se encargara de presenta toda petición hecha en los link de SeccionIzquierdoMostrarHtml. 4.6.3 BarraMenu.Class La clase barra menú se encarga de consultar si el parámetro que recibe en la variable opción es para presentar el Portal Web o el Portal del Administrador. 4.6.4 CuadroHtml CuadroHtml ('Aquidescarga','100%',"ZG",0,0, "",0,1,1); CuadroHtml($titulo="",$ancho=0,$estilo="",$border=0,$bicolor=0, $pie="",$prepie=0,$preSub=0,$ocultar=0) 4.6.5 Funciones Esta función se encarga de crea la sesión para el carrito de compra. 124 4.6.6 Lib Inc Esta pagina php incluirá todas las clases de nuestra aplicación, convirtiéndose de esta manera en una librería. Para que de esta manera evites llamar de forma independiente en cada clase: Include ("./lib/lib.inc.php"); 4.6.7 VinculoUrl.Class Es una clase que permite la creación de links que van hacer displayado en la página que sea invocada, recibiendo los respectivos parámentos como son: $etiqueta.- Es el nombre que se va a visualizar en el vinculo $pagina.- Es la dirección donde va a irse una ves que sea activado el link. $cssClass.- Definirá el estilo que va a tener el vinculo $extra.- Será usado como un parámetro extra. 4.6.8 Configuraciones Aquí de definen las constantes que serán usadas en toda nuestra aplicación, para que de esta se disminuya el uso de variables locales Ejemplo: define ('config_moneda', 'Dolar'); 125 4.7 Módulos 4.7.1 Subir Archivos El modulo de subir archivos tendrá acceso una vez que el usuario haya ordenado una suscripción. Este modulo presentara un formulario donde podrá elegir que categoría desea subir además deberá ingresar el titulo que quiere que se presente en el portal, el valor asignado por su venta, un breve resumen del contenido a publicar y añadirá el archivo principal y el archivo resumen este ultimo puede ser de manera opcional. Si cumple con las validaciones respectivas el archivo será subido al portal sin ningún problema. 4.7.2 Carrito de Compra Este modulo esta validado primero de que sea un usuario registrado el que quiera comprar es por tal razón que si no esta logoniado y da clic en el botón de carro de comprar esta acción lo enviara a logoniarse para poder comprar. El Carrito de compra añadirá todo artículo que el usuario desee comprar y le permitirá ver un resumen de todo lo que ha incluido. Teniendo la opción de eliminar algún articulo que ya no desee. 126 Una vez que se haya decido por la compra el portal lo enviara al simulador de pagos quien solicitara todos los datos necesarios para poder efectuar la transacción. 4.7.3 Búsquedas El modulo de búsqueda esta programado para que las consulta sean hechas a la tabla tbpv_producto_publicado de acuerdo a la opción que escoja el usuario, para efectos de presenta tenemos tres alternativas de búsqueda: 1. Busca todos los contenidos existentes 2. Busca tanto por el titulo o por el resumen breve en todos los contenidos existentes 3. Busca tanto por el titulo o por el resumen breve en una categoría determinada. 4.7.4 Descargas Luego de realizar las respectivas búsquedas de información el usuario deberá dar clic en el botón AÑADIR AL CARRO de esta manera todo contenido que selección será sumado en la Canasta. Una que halla decidido su comprar deberá realizar la respectiva transacción financiera por medio de una tarjeta de crédito validad. 127 Esperaremos la autorización del banco para que el usuario pueda realizar la respectiva descargar. Todo contenido podrá ser descargado tres veces o en un máximo de cinco días. Damos esta opción para poder garantizar la descarga completa del archivo es vista de que no conocemos las circunstancias en donde se encuentre bajando el archivo. 128 CAPITULO 5 Pruebas De acuerdo a las presentaciones frecuentes de los avances del proyecto al profesor para su evaluación. Fue necesario realizarle pruebas para saber si funciona de acuerdo con las especificaciones y en la forma en que los usuarios esperan que lo haga. 129 Estas pruebas consistieron en probar la funcionabilidad del sistema como si estuviera realizando sus operaciones cotidianas para lo cual fue desarrollado se ingresaron conjunto de datos (entradas) para su procesamiento y después se examinan sus salidas o resultados. En varias ocasiones dejamos que personas ajenas utilicen el sistema para detectar errores no encontrados en el proceso de desarrollo. Adicionalmente a las pruebas también tomamos en cuenta un grupo de métricas: Y determinamos que las métricas no son tan fáciles para los sitios de contenido que miden su éxito en ventas, en relación a los sitios que ofrecen contenidos gratuitos (visitas a sitio más de una vez, durante un período de tiempo específico) para satisfacer sus necesidades. 5.1 Métricas que pudimos probar con los usuarios 5.1.1 Satisfacción del Cliente En el transcurso de la programación de nuestra aplicación nos dimos cuenta que teníamos un procedimiento repetido (registro de la tarjeta de crédito) lo cual podía molestar al usuario o a la ves tendía a confundirlo por tal razón luego de hacer pruebas con personas ajenas al proyecto en la etapa de desarrollo, nos guiamos con otras paginas de Internet para el 130 registro de tarjeta de crédito y de esta manera pudimos darle un mejor proceso a esta operación. Ahora el usuario solo deberá ingresar los datos de la tarjeta que crédito una vez que se allá decido por la compra. Otra prueba analizada fue al momento de la segunda sustentación donde el jurado indico que para una mejor atención al usuario deberíamos direccionarlo al login para poder realizar una compra y no espera que este dando clic en todo el portal sin saber en que momento podía concluir su compra. 5.1.2 Desempeño del sitio Con respecto a la navegabilidad del sitio planteamos varias opciones para encontrar de una manera mas rápida lo que se buscar y así evitar que los usuarios se impacientes. Es por tal razón que ahora tenemos tres opciones de búsquedas, al inicio solo teníamos planteada una opción (buscar por titulo), pero en vista de que esta opción estaba limitando al usuarios, analizamos que campo podía ayudarnos para una mejor búsqueda y resolvimos que también la búsqueda sea por el resumen breve ya que es ahí donde se debe poner una esencia del documento para que este pueda ser vendido. 131 5.1.3 Tiempo promedio de permanencia en el sistema El tiempo estimado para que un usuario publique un contenido es nuestro portal es muy corto por que casi todas las opciones son de escoger, él solo debe se hacer clic y esta lista su orden de suscripción. Donde si tendrá que demorarse un poco será al momento de subir un contenido ¿porque? Es aquí donde el debe de poner lo mejor de contenido en un breve resumen o en su defecto adjuntar también el archivo resumen por que será de estas dos manera que el podrá darse a canecer para así poder vender su contenido, ya que si no describe lo que esta subiendo y mucho menos adjunta el archivo resumen, entonces no podrá esperar vender algo que no se conoces. De igual manera para quien quiera descargarse un contenido primero deberá tomarse su tiempo leyendo el resumen breve y revisando los archivos resumen para estar seguro de lo que busca. “Es difícil hacer pruebas al sistema y no encontrar ningún error, ya que los errores nos ayudan a mejorar nuestros sistemas, si no tuviéramos errores realmente no sabríamos si todo esta bien o de lo contrario que todo este mal” CAPÍTULO 6 Recomendaciones y Conclusiones del Proyecto 6.1.- Recomendaciones Debido a la naturaleza del proyecto y considerando las características del mismo, debemos tomar en cuenta tanto el manual de usuario, y para el manual técnico suministrado en este proyecto. 133 6.1.1 Interfaz Nuestro portal aquidescarga.com puede ser visitado mediante varios navegadores tales como Internet Explorer, Mozilla, Netscape Navigator, Safari, y a través de las pruebas determinamos y recomendamos el uso de Internet Explorer y Mozilla, ya que en ellos se ha podido apreciar los mejores resultados, en la funcionabilidad del portal y la satisfacción del usuario. También se recomienda que las computadoras utilizadas para acceder a nuestro portal tengan habilitadas las dll o aplicaciones necesarias para la visualización del producto final (Documento en formato PDF). La recomendación referente a la cuenta de correo que el usuario utilizará para el registro en nuestro portal, es que dicha cuenta sea preferentemente de Gmail o Yahoo, puesto que en las pruebas preliminares de envío de correo, se verifico que otras cuentas de correo tarda por lo menos 24 horas para que éste llega a la bandeja de entrada del usuario. 134 6.1.2.- Hardware Entre las recomendaciones que hacemos en cuanto a hardware para nuestro proyecto se encuentran: Que para el alojamiento del portal se considere un Hosting que nos proporcione una buena capacidad de almacenamiento y procesamiento ya que esto es un punto vital para un buen funcionamiento, no es recomendable que se instale un servidor Web para la puesta en marcha del proyecto dado que por costos en hardware y los servicios referentes al Internet no seria rentable, ni seguro. Para efectos académicos nuestro portal esta ubicado en un hosting que ofrece 10000 MB de capacidad de almacenamiento en disco, siendo esta una buena capacidad tomando en cuenta que inicialmente es para efectos académicos, pero dicha capacidad debería ser mayor si hablamos de una implementación real y comercial. 6.1.3.- Software Para la parte de software, la principal recomendación es contar con el programa adecuado (Adobe Reader) para poder visualizar los archivos en formato PDF que presenta nuestro portal. 135 En lo referente a la descarga de archivos se recomienda el uso de programas externos para acelerar el proceso de descarga, mucho más si se trata de archivos de gran tamaño. En cuanto a factor financiero, una buena opción es la de realizar los cobros mediante alguna empresa que tenga experiencia en el medio, siendo una de éstas PayPal o en su defecto alguna otra entidad que brinde el servicio. 6.1.4.- Seguridades En lo que respecta a las seguridades del proyecto, se recomienda la implementación de un certificado digital para proporciónale al usuario la confianza necesaria al momento de realizar las respectivas transacciones dentro de nuestro portal. Otro punto importante para garantizar la transparencia y seriedad del portal es la contratación de una o varias entidades auditoras de sistemas externas, que pueden verificar y confirmar que las transacciones realizadas en el portal sean las que se reflejen en el Estado de Cuenta de cada uno de nuestros Usuarios. 136 6.1.5.- Respaldos del Portal Se sugiere que se realice el respectivo respaldo tanto de la base da datos como del portal, ya que este puede irse modificando y mejorando con el tiempo. Se recomienda que para la contratación del servicio de hosting, éste cuente con ambas opciones en su panel de control (cpanel), y que el administrador responsable del portal realice el respaldo periódicamente y que sean distribuidas por lo menos en dos computadores y que estos cuenten con sus respectivas seguridades. 6.1.6.- Conclusiones El desarrollo del proyecto aquidescarga.com está basado en una lógica de negocio que permite a las personas utilizar nuestro portal como un medio de Venta de Información, donde se pueda publicar contenidos que otras personas necesiten descargar y así los primeros puedan obtener beneficios económicos. Por esta razón hemos utilizado una arquitectura cliente servidor que nos permite resguardar la integridad de la información, debido al alto nivel de 137 transacciones que se realizan en la aplicación; junto con el certificado y el algoritmo MD5 brindamos seguridad y confianza a nuestros usuarios. Complementando esta seguridad, recomendamos la contratación de una empresa auditora de sistemas externa que certifique la credibilidad sitio. Por ser un proyecto tipo académico nos vimos en la necesidad de utilizar herramientas gratis como son el lenguaje PHP5, MYSQL5, APACHE 2.0, y de esta manera nos ahorramos dinero en cuanto a licencias y se nos facilito la subida de código a los diferentes hosting puestos que estos funciona con herramientas gratis. Tomando en cuenta que el código php se ejecuta en el servidor, tuvimos que utilizar validaciones basadas en Jscript puestos que estas si se ejecutan en las maquinas clientes, ahorrando así tiempo en los procesos. Dado que nuestra aplicación WEB maneja archivos de tamaño considerable, decidimos contratar los servicios de un hosting especializado que brinde una buena capacidad en disco para el almacenamiento de información, por que los servidores propios en el 138 Ecuador actualmente son muy caros en su mantenimiento y los servicios de Internet son poco confiables. 139 GLOSARIO DE TERMINOS Apache Software libre de codigo abierto para multiplataformas Arquitectura Conjunto de patrones y abstracciones coherentes Base de Datos Guarda los datos del sistema Backup Respaldo de información del sistema Campos Atributo de una tabla Codigo Fuentes Lenguaje mediante el cual fue programado el sistema. Conexion Comunicación entre varias maquinas. Codigo Malicioso Sentencias de programación, que tiene un fin malicioso Cookies Fragmento de información que se almacena en el disco duro del visitante de una página web a través de su navegador Descarga Copiar a través de una red (Internet) un elemento que se encuentra ubicado físicamente en otro ordenador Modelo de red que describe la distribución de los datos almacenados en un sistema de forma abstracta Se trata de una medida de seguridad que es usada para almacenar o transferir información delicada Reglas predefinidas para realizar la implementacion de un proyecto. Parte física de una PC. Diagrama Encriptacion Estandares Hardware 140 GLOSARIO DE TERMINOS Interfaz Medio grafico de comunicación entre la PC y el usuario. Jscript Lenguaje de programación interpretado, o sea, no requiere compilación. Multiplataforma Se puede trabajar sobre diferentes sistemas operativos sin que afecte su desempeño Password Contraseña de acceso a la aplicacion. Plantilla Página pre-desarrollada que es empleada para crear nuevas páginas con el mismo diseño Políticas de Seguridad Conjunto de normas y reglas para mantener seguro un sistema. Publicacion Es el ultimo paso de la elaboracion de un proyecto Web Simulador Los simuladores reproducen sensaciones que en realidad no están sucediendo. Software Programas en ejecución. Servidor. Equipo de computo, el cual esta recibiendo constante peticiones de clientes para proveerle de algún servicio 141 ANEXOS 142 Certificado Emitido por Equifax Secure eBusiness Anexo No. 1 Certificado Este es nuestro Certificado Digital que garantiza la seguridad de Aquidescarga.com 143 Cronograma de actividades del desarrollo del proyecto. Cronograma de Actividades (Parte 1) Portal de Venta de Informacion Personal Nombre de Tarea Elección del Proyecto Web Ajustes del Enfoque del Proyecto Identificación del Tema Definir la problemática del tema Buscar soluciones a la problemática Determinación de Objetivos Determinación de Objetivos Específicos Determinación de Alcances Determinación de Misión, Visión Determinación de Arquitectura a usa Determinación de Metodologías Recurso de Hardware Recurso Humano Recurso de Software Cronograma de Actividades Duracion 1 Comienzo Fin 19/04/2007 19/04/2007 4 4 4 1 2 3 1 3 2 2 2 2 1 20/04/2007 24/04/2007 28/04/2007 02/05/2007 03/05/2007 05/05/2007 08/05/2007 09/05/2007 12/05/2007 14/05/2007 16/05/2007 18/05/2007 20/05/2007 24/04/2007 28/04/2007 02/05/2007 03/05/2007 05/05/2007 08/05/2007 09/05/2007 12/05/2007 14/05/2007 16/05/2007 18/05/2007 20/05/2007 22/05/2007 3 22/05/2007 25/05/2007 4 25/05/2007 29/05/2007 4 29/05/2007 02/06/2007 4 02/06/2007 06/06/2007 3 06/06/2007 09/06/2007 3 09/06/2007 12/06/2007 4 12/06/2007 16/06/2007 3 16/06/2007 19/06/2007 Etapa de Análisis del Portal Identificación de los Requerimientos del Negocio Diagramas de Casos de Uso de la información del proyecto Diagramas de Secuencias de la información del proyecto Diagramas de Estados de la información del proyecto Descripción de los diagrama s de casos de usos de la información de nuestro proyecto Diagrama de Entidad Relación de nuestro proyecto Diagrama de Clases de la información de nuestro proyecto Descripción de los diagramas de clases de la información de nuestro proyecto Anexo No. 2a Cronograma de Actividades 144 Cronograma de Actividades (Parte 2) de Venta de Informacion Personal Duracion Nombre de Tarea Comienzo Portal Fin Etapa de Diseño del Portal 3 Segmentación de la pagina de diseño 3 Definición de la pagina principal de nuestro proyecto 2 Definición de paginas secundarias 2 Definición de pagina principal y secundaria del Administrador 2 Mapa del Sitio 3 Mapeo de Navegación 3 Definición de Colores a usar en la pagina 1 Elaboración de logotipo 1 Primera Sustentación Instalaciones de Herramientas a usar 1 Diseño y contracción de pantallas principal 2 Diseño y construcción de pantallas secundarias 2 Diseño y construcción de la Base de Datos 2 Codificación de enlace con la Base de Datos 20 Construcción de las clases a usar 5 Codificación programática de las pantallas 29 Pruebas de conectividad 5 Pruebas evaluativas del portal 5 Segunda Sustentación 1 Análisis de observaciones 5 Codificación de pantallas 30 Modificaciones de Tablas 3 Eleccion de Imágenes 1 pruebas gratis en internet 7 7 correccion de codigos documentacion del codigo 4 19/06/2007 22/06/2007 25/06/2007 27/06/2007 29/06/2007 01/07/2007 04/07/2007 07/07/2007 09/07/2007 22/06/2007 25/06/2007 27/06/2007 29/06/2007 01/07/2007 04/07/2007 07/07/2007 08/07/2007 09/07/2007 15/07/2007 17/07/2007 17/07/2007 19/07/2007 19/07/2007 21/07/2007 21/07/2007 10/08/2007 10/08/2007 15/08/2007 15/08/2007 13/09/2007 13/09/2007 18/09/2007 18/09/2007 23/09/2007 23/09/2007 24/09/2007 24/09/2007 25/09/2007 25/09/2007 30/09/2007 01/10/2007 30/10/2007 30/10/2007 02/11/2007 02/11/2007 03/11/200 03/11/2007 10/11/2007 10/11/2007 17/11/2007 17/11/2007 21/11/2007 Anexo No. 2b Cronograma de Actividades 145 Cronograma de Actividades (Parte 3) Portal de Venta de Informacion Personal Duracion Nombre de Tarea Comienzo Fin Etapa de Implementación Compra de Hosting e Instalación de Certificado Subida de Proyecto al Hosting 5 21/11/2007 26/11/2007 1 26/11/2007 27/11/2007 5 27/11/2007 02/12/2007 5 03/12/2007 08/12/2007 4 08/12/2007 15/12/2007 1 15/12/2007 15/12/2007 Etapa de Prueba Monitoreo de funcionabilidad Corrección de Errores Nuevos Monitores Entrega del proyecto Anexo No. 2c Cronograma de Actividades 146 Cuadro Probabilística de Descargas y Ganancias en el Ecuador Cuadro estadísticos de Probabilidades de Descargas en el Ecuador 2.00 Mes Diciembre Enero Febrero Marzo Abrir Mayo Junio Julio Agosto Septiembre Octubre Noviembre Población Ecuatoriana 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 13,000,000.00 Población Local 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 11,700,000.00 Acceso al Internet 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 234,000.00 Probabilidad de personas en el Ecuador que descarguen información 2% Anexo No. 3a Presupuesto Porcentaje 0.10% 0.09% 0.12% 0.13% 0.10% 0.09% 0.10% 0.09% 0.11% 0.08% 0.12% 0.10% Descargas 234.00 210.60 280.80 304.20 234.00 210.60 234.00 210.60 257.40 187.20 280.80 234.00 Ingreso Promedio $ 3,276.00 $ 4,212.00 $ 1,404.00 $ 6,084.00 $ 1,872.00 $ 2,106.00 $ 3,510.00 $ 1,053.00 $ 2,574.00 $ 5,616.00 $ 4,212.00 $ 4,212.00 Ganancia 20% $ $ $ $ 1, $ $ $ $ $ $ 1, $ $ 147 BIBLIOGRAFIA Libros consultados: 1.- Ingeniería de Software por Pressman Paginas Web consultadas: 1.- www.google.com 2.- www.lawebdelprogramador.com 3.- www.sourceforge.net 4.- www.webnova.com.ar 5.- www.xyberneticos.com 6.- www.php.net 7.- www.cristalab.com 8.- www.programacionweb.net 9.- www.webtaller.com 10.- www.designdisease.com 11.- www.webestilos.com UNIVERSIDAD DE GUAYAQUIL Facultad de Ciencias Matemáticas y Física Carrera de Ingeniería en Sistemas Computacionales “PORTAL DE VENTA DE INFORMACION PERSONAL BAJO SUSCRIPCION” PROYECTO DE GRADO Previo a la Obtención del Titulo de: INGENIERO EN SISTEMAS COMPUTACIONALES Autores: Diana Cecilia Alava Espinoza Freddy Walter Cevallos Tomalá Carlos Alberto Orrala Holguín GUAYAQUIL – ECUADOR Año: 2007 II AGRADECIMIENTO Agradecemos a Dios por la salud y la fortaleza para concluir con éxito una etapa más de nuestras vidas, a todas las personas que han contribuido de alguna manera la realización del proyecto y a nuestros padres por estar siempre guiándonos en nuestra vida. III DEDICATORIA Dedicamos este trabajo a Dios por estar siempre a nuestro lado en todo momento. A nuestros padres y hermanos por todo el cariño, la confianza, y el amor brindado en este tiempo de esfuerzo y sacrificio. IV TRIBUNAL DE GRADUACION Presidente del Tribunal Primer Vocal Segundo Vocal Secretario V DECLARACIÓN EXPRESA “La autoría de la tesis de grado corresponde exclusivamente al suscrito(s), perteneciendo a la Universidad de Guayaquil los derechos que generen la aplicación de la misma”. (Reglamento de Graduación de la Carrera de Ingeniería en sistemas Computacionales, Art. 26) VI INDICE GENERAL AGRADECIMIENTO ....................................................................................... II DEDICATORIA .............................................................................................. III TRIBUNAL DE GRADUACION ..................................................................... IV DECLARACIÓN EXPRESA ........................................................................... V INDICE GENERAL ........................................................................................ VI ÍNDICE DE GRÁFICOS .................................................................................. X ÍNDICE DE TABLAS ..................................................................................XVII CAPITULO I.................................................................................................XIX 1.1 Diagrama de Casos de Uso .................................................................. 20 1.1.1 REGISTRO DE USUARIO ....................................................................... 20 1.1.1.1 Descripción del Caso de Uso - Registro de Usuario .................. 21 1.1.2 ORDEN SUSCRIPCIÓN. ......................................................................... 21 1.1.1.3 Descripción del Caso de Uso - Orden Suscripción .................... 21 1.1.3 SERVICIOS DEL PORTAL ....................................................................... 23 1.1.3.1 Descripción del Caso de Uso - Servicios del Portal .................. 23 1.1.4 CONSOLA ADMINISTRATIVA .................................................................. 25 1.2 Diagramas de Estado ........................................................................... 26 1.2.1 REGISTRO USUARIO ............................................................................ 26 1.2.1.1 Descripción de Diagrama de Estado - Registro Usuario ............ 26 1.2.2 ACTIVACIÓN DE CUENTA ...................................................................... 27 1.2.2.1 Descripción de Diagrama de Estado – Activación de Cuenta .... 27 VII 1.2.3 SERVICIOS DEL PORTAL ....................................................................... 28 1.2.3.1 Descripción del Diagrama de Estado - Servicios del Portal ....... 29 1.2.4 CONSOLA ADMINISTRATIVA .................................................................. 30 1.2.5 Descripción de Diagrama de Estado - Consola Administrativa ..... 30 1.3 Diccionario de datos. ............................................................................ 31 1.3.1 TABLAS CONTROL DE APLICACIONES. ................................................... 31 1.3.2 TABLAS PORTAL DE PAGO ................................................................... 34 1.3.3 TABLAS PORTAL DE VENTA ................................................................... 36 1.4 Páginas y Clase del Proyecto .............................................................. 44 1.4.1 DB_MYSQL.CLASS .............................................................................. 44 1.4.2 BARRAMENU.CLASS ............................................................................ 46 1.4.3 CUADROHTML.CLASS. ......................................................................... 47 1.4.4 FUNCIONES.PHP.................................................................................. 50 1.4.5 VINCULOURL.CLASS. ........................................................................... 51 1.4.6 PLANTILLAHTML.CLASS.PHP ................................................................. 52 1.4.7 PLANTILLADIALOGOHTML.CLASS. PHP................................................... 68 1.4.8 CLS_SUSCRIPTOR. PHP ........................................................................ 69 1.4.9 CLS_SQLSUSCRIPTOR.PHP ................................................................... 72 1.4.10 CLS_TRANSSUSCRIPTOR .................................................................... 77 1.4.11 CLS_PRODUCTO_PUBLICADO.PHP ....................................................... 81 1.4.12 CLS_SQLPRODUCTO_PUBLICADO ........................................................ 84 1.4.13 CLS_TRANSPRODUCTO_PUBLICADO .................................................... 98 VIII 1.4.14 CLS_GESTOR .................................................................................. 103 1.4.15 CLS_SQLGESTOR ............................................................................ 105 1.4.16 CLS_TRANSGESTOR ........................................................................ 115 1.4.17 DESCARGAR.PHP ............................................................................ 117 1.4.18 DOWNLOAD.PHP ............................................................................. 118 1.4.19 ADMINCONTROLCONTENIDO.PHP ...................................................... 120 1.4.20 ADMIN_CONT_UPDATE.PHP.............................................................. 124 1.4.21 ADMINCONTENIDO_VIEW .PHP ........................................................... 128 1.4.22 ADMINVIEW .PHP .............................................................................. 129 1.4.23 CARGAR_ARCHIVO.PHP ................................................................... 130 CAPITULO 2................................................................................................. 37 2.1 Instalación del servidor Web para Linux. ......................................... 137 2.1.1 PASOS PARA LA INSTALACIÓN DE XAMPP EN LINUX. .............................. 137 2.1.2 INSTALACIÓN DE MYSQL TOOLS FOR 5.0 PARA LINUX.......................... 139 2.1.3 INSTALACIÓN DE LA BASE DE DATOS “W EB”......................................... 139 2.1.4 CREACIÓN DEL USUARIO PARA CONECTARSE A LA BASE DE DATOS DE AQUIDESCARGA.COM .................................................................................. 141 2.1.5 INSTALACIÓN DEL PORTAL AQUIDESCARGA.COM DENTRO DE NUESTRO SERVIDOR W EB EN LINUX. .......................................................................... 143 2.2 Instalación del servidor Web para Windows. ................................... 144 2.1.1 PASOS PARA LA INSTALACIÓN DE EASYPHP. ....................................... 144 2.1.2 USO DE EASYPHP. ........................................................................... 151 IX 2.1.3 INSTALACIÓN DE MYSQL TOOLS FOR 5.0 PARA W INDOWS. .................. 153 2.1.4 INSTALACIÓN DE LA BASE DE DATOS DE AQUIDESCARGA ...................... 157 2.1.5 CREACIÓN DEL USUARIO PARA CONECTARSE A LA BASE DE DATOS DE AQUIDESCARGA ......................................................................................... 158 2.1.6 INSTALACIÓN DEL PORTAL W EB EN W INDOWS...................................... 158 2.1.7 OBTENCIÓN DEL DOMINIO PARA AQUIDESCARGA.COM .......................... 159 2.1.8 OBTENCIÓN DEL HOSTING PARA AQUIDESCARGA.COM .......................... 164 2.3 Funcionalidad del proyecto aquidescarga ....................................... 170 2.3.1 PAGINA DE INICIO DEL PORTAL. ........................................................... 170 2.3.2 PANTALLA DE REGISTRO DE USUARIOS. ............................................... 171 2.3.3 PANTALLA MI CUENTA........................................................................ 173 2.3.4 PANTALLA PAGO DE SUSCRIPCIÓN. ..................................................... 174 2.3.5 PANTALLA DE SIMULADOR DE PAGO.................................................... 175 2.3.6 PANTALLA DE SUBIR ARCHIVOS. ......................................................... 176 2.3.7 PANTALLA DE CONFIRMACIÓN. ........................................................... 177 2.3.8 PANTALLA PARA REALIZAR LA COMPRA. ............................................... 178 X ÍNDICE DE GRÁFICOS Gráfico No.1.1 Diagrama de casos de uso............................................... 20 Registro de Usuario .................................................................................... 20 Gráfico No.1.2 Diagrama de casos de uso Orden Suscripción .............. 21 Gráfico No.1.3.............................................................................................. 23 Diagrama de casos de uso Servicios del Portal....................................... 23 Gráfico No.1.4.............................................................................................. 25 Diagrama de casos de uso ......................................................................... 25 Consola Administrativa .............................................................................. 25 Gráfico No.1.5.............................................................................................. 26 Diagrama de estado Registro Usuario ...................................................... 26 Gráfico No.1.6.............................................................................................. 27 Diagrama de estado Activación de Cuenta.............................................. 27 Gráfico No.1.7.............................................................................................. 28 Diagrama de estado Servicios del Portal .................................................. 28 Gráfico No.1.8.............................................................................................. 30 Diagrama de estado Consola Administrativa ........................................... 30 Gráfico No. 1.9a. Clase DB_mysql ............................................................. 45 Gráfico No.1.10a Clase BarraMenu ........................................................... 46 Gráfico No.1.10b Clase BarraMenu ........................................................... 47 Gráfico No. 1.11a Clase Cuadrohtml ......................................................... 47 Gráfico No.1.11b Clase Cuadro html ......................................................... 48 XI Gráfico No.1.11c Clase Cuadro html ......................................................... 49 Gráfico No.1.11d Clase CuadroHtml ........................................................ 50 Gráfico No.1.12a. funciones.php ............................................................... 51 Gráfico No.1.13a. Clase VinculoUrl.class ................................................. 51 Gráfico No.1.13b Clase VinculoUrl.class .................................................. 52 Gráfico No.1.14a. Clase PlantillaHtml.class ............................................ 54 Gráfico No.1.14b Clase PlantillaHtml.class .............................................. 55 Gráfico No.1.14c Clase PlantillaHtml.class .............................................. 56 Gráfico No.1.14d Clase PlantillaHtml.class .............................................. 57 Gráfico No.1.14e Clase PlantillaHtml.class .............................................. 58 Gráfico No.1.14f Clase PlantillaHtml.class ............................................... 59 Gráfico No.1.14g. Clase PlantillaHtml.class ............................................. 60 Gráfico No.1.14h. Clase PlantillaHtml.class ............................................. 61 Gráfico No.1.14i. Clase PlantillaHtml.class .............................................. 62 Gráfico No.1.14j. Clase PlantillaHtml.class .............................................. 63 Gráfico No.1.14k. Clase PlantillaHtml.class.............................................. 64 Gráfico No.1.14l. Clase PlantillaHtml.class .............................................. 65 Gráfico No.1.14m. Clase PlantillaHtml.class ............................................ 66 Gráfico No.1.14n. Clase PlantillaHtml.class ............................................. 67 Gráfico No.1.15a. Clase PlantillaDialogoHtml.class. ............................... 68 Gráfico No.1.16a. Clase cls_suscriptor ..................................................... 69 Gráfico No.1.16b. Clase cls_suscriptor .................................................... 70 XII Gráfico No.1.16c. Clase cls_suscriptor ..................................................... 71 Gráfico No.1.17a. Clase cls_sqlsuscriptor................................................ 72 Gráfico No.1.17b. Clase cls_sqlsuscriptor ............................................... 73 Gráfico No.1.17c. Clase cls_sqlsuscriptor................................................ 74 Gráfico No.1.17d. Clase cls_sqlsuscriptor ............................................... 75 Gráfico No.1.17e. Clase cls_sqlsuscriptor................................................ 76 Gráfico No.1.18a. Clase cls_transsuscriptor ............................................ 77 Gráfico No.1.18b Clase cls_transsuscriptor ............................................. 78 Gráfico No.1.18c. Clase cls_transsuscriptor ............................................ 79 Gráfico No.1.18d. Clase cls_transsuscriptor ............................................ 80 Gráfico No.1.19a. Clase cls_Producto_publicado.................................... 81 Gráfico No.1.9b. Clase cls_Producto_publicado.php .............................. 82 Gráfico No.1.19c. Clase cls_Producto_publicado. ................................... 83 Gráfico No.1.20a. Clase cls_sqlProducto_publicado .............................. 84 Gráfico No.1.20b. Clase cls_sqlProducto_publicado .............................. 85 Gráfico No.1.20c. Clase cls_sqlProducto_publicado .............................. 86 Gráfico No.1.20d. Clase cls_sqlProducto_publicado .............................. 87 Gráfico No.1.20e. Clase cls_sqlProducto_publicado .............................. 88 Gráfico No.1.20f. Clase cls_sqlProducto_publicado ............................... 89 Gráfico No.1.20g. Clase cls_sqlProducto_publicado .............................. 90 Gráfico No.1.20h. Clase cls_sqlProducto_publicado .............................. 91 Gráfico No.1.20i. Clase cls_sqlProducto_publicado ............................... 92 XIII Gráfico No.1.20j. Clase cls_sqlProducto_publicado ............................... 93 Gráfico No.1.20k. Clase cls_sqlProducto_publicado .............................. 94 Gráfico No.1.20l. Clase cls_sqlProducto_publicado ............................... 95 Gráfico No.1.20m. Clase cls_sqlProducto_publicado ............................. 96 Gráfico No.1.20n. Clase cls_sqlProducto_publicado .............................. 97 Gráfico No.1.21a. Clase cls_transProducto_publicado ........................... 98 Gráfico No.1.21b. Clase cls_transProducto_publicado ........................... 99 Gráfico No.1.21c. Clase cls_transProducto_publicado ......................... 100 Gráfico No.1.21d. Clase cls_transProducto_publicado ......................... 101 Gráfico No.1.21e. Clase cls_transProducto_publicado ......................... 102 Gráfico No.1.22a. Clase cls_gestor ......................................................... 103 Gráfico No.1.22b. Clase cls_gestor ......................................................... 104 Gráfico No.1.23a. Clase cls_sqlgestor .................................................... 105 Gráfico No.1.23b. Clase cls_sqlgestor .................................................... 106 Gráfico No.1.23c. Clase cls_sqlgestor .................................................... 107 Gráfico No.1.23d. Clase cls_sqlgestor .................................................... 108 Gráfico No.1.23e. Clase cls_sqlgestor .................................................... 109 Gráfico No.1.23f. Clase cls_sqlgestor ..................................................... 110 Gráfico No.1.23g. Clase cls_sqlgestor .................................................... 111 Gráfico No.1.23h. Clase cls_sqlgestor .................................................... 112 Gráfico No.1.23i. Clase cls_sqlgestor ..................................................... 113 Gráfico No.1.23j. Clase cls_sqlgestor ..................................................... 114 XIV Gráfico No.1.24a. Clase cls_transgestor ................................................ 115 Gráfico No.1.24b. Clase cls_transgestor ................................................ 116 Gráfico No.1.25a. descargar.php ............................................................. 117 Gráfico No.1.25b. descargar.php ............................................................. 118 Gráfico No.1.26a. Download.php ............................................................. 118 Gráfico No.1.26b. Download.php ............................................................. 119 Gráfico No.1.27a. admincontrolcontenidos.php ................................... 120 Gráfico No.1.27b. admincontrolcontenidos.php .................................... 121 Gráfico No.1.27c. admincontrolcontenidos.php .................................... 122 Gráfico No.1.27d. admincontrolcontenidos.php .................................... 123 Gráfico No.1.28a. admin_cont_update.php ............................................ 124 Gráfico No.1.28b admin_cont_update.php ............................................. 125 Gráfico No.1.28c. admin_cont_update.php ............................................ 126 Gráfico No.1.28d. admin_cont_update.php ............................................ 127 Gráfico No.1.29a. admincontenido_view.php ......................................... 128 Gráfico No.1.30ª. adminview.php ............................................................ 129 Gráfico No.1.31a. cargar_archivo.php ................................................... 130 Gráfico No.1.31b. cargar_archivo.php ................................................... 131 Gráfico No.1.31c. cargar_archivo.php ................................................... 132 Gráfico No.1.31d. cargar_archivo.php ................................................... 133 Gráfico No.1.31e. cargar_archivo.php ................................................... 134 Gráfico No.1.31f. cargar_archivo.php .................................................... 135 XV Gráfico No.2.1. Instalación de Xampp ..................................................... 138 Gráfico No.2.2. Interfaz de PhpMyAdmin. ............................................... 140 Gráfico No.2.3. Importación de la base Web. ......................................... 140 Gráfico No.2.4. Tablas de la base Web ................................................... 141 Gráfico No.2.5. Creación de usuario en la base ..................................... 142 Gráfico No.2.6. Privilegios para el usuario en la base “Web”. .............. 142 Gráfico No.2.7 Pantalla inicial de Aquidescarga .................................... 143 Gráfico No.2.8. Selección de idioma para EasyPHP. ............................. 145 Gráfico No.2.9. Instalación de EasyPHP (Paso 2) .................................. 145 Gráfico No.2.10. Instalación de EasyPHP (Paso 2) ................................ 146 Gráfico No.2.11. Instalación de EasyPHP (Paso 3) ................................ 147 Gráfico No.2.12. Instalación de EasyPHP (Paso 4) ................................ 147 Gráfico No.2.13. Instalación de EasyPHP (Paso 5) ................................ 148 Gráfico No.2.14. Instalación de EasyPHP (Paso 6) ................................ 149 Gráfico No.2.15. Instalación de EasyPHP (Paso 7) ................................ 149 Gráfico No.2.16. Instalación de EasyPHP (Paso 8) ................................ 150 Gráfico No.2.17. Instalación de EasyPHP (Paso 9) ................................ 150 Gráfico No.2.18. Menú Inicio, Programas con EasyPHP ...................... 151 Gráfico No.2.19. Icono de EasyPHP en la barra de tareas. ................... 152 Gráfico No.2.20. Menú contextual de EasyPHP en la barra de tareas. . 152 Gráfico No.2.21. Configuracion de EasyPHP.......................................... 153 Gráfico No.2.22. Instalación de MySQL Tools (Paso 1). ........................ 154 XVI Gráfico No.2.23. Instalación de MySQL Tools (Paso 2). ........................ 154 Gráfico No.2.24. Instalación de MySQL Tools (Paso 3). ........................ 155 Gráfico No.2.25. Instalación de MySQL Tools (Paso 4). ........................ 155 Gráfico No.2.26. Instalación de MySQL Tools (Paso 5). ........................ 156 Gráfico No.2.27. Instalación de MySQL Tools (Paso 6). ........................ 156 Gráfico No.2.28. Instalación de MySQL Tools (Paso 7). ........................ 157 Gráfico No.2.29. Obtención del dominio (Paso 1). ................................. 159 Gráfico No.2.30. Obtención del dominio (Paso 2). ................................. 160 Gráfico No.2.31. Obtención del dominio (Paso 3). ................................. 160 Gráfico No.2.32. Obtención del dominio (Paso 4). ................................. 161 Gráfico No.2.33. Obtención del dominio (Paso 5). ................................. 162 Gráfico No.2.34. Obtención del dominio (Paso 6). ................................. 163 Gráfico No.2.35. Obtención del dominio (Paso 7). ................................. 163 Gráfico No.2.36. Obtención del hosting (Paso 1). .................................. 164 Gráfico No.2.37. Obtención del hosting (Paso 2). .................................. 165 Gráfico No.2.38. Obtención del hosting (Paso 3). .................................. 166 Gráfico No.2.39. Obtención del hosting (Paso 4). .................................. 167 Gráfico No.2.40. Obtención del hosting (Paso 4). .................................. 167 Gráfico No.2.41. Obtención del hosting (Paso 5). .................................. 168 Gráfico No.2.42. Obtención del hosting (Paso 6). .................................. 169 XVII ÍNDICE DE TABLAS Tabla No.1.1. tbca_aplicacion ................................................................... 32 Tabla No.1.2. tbca_documento ................................................................. 32 Tabla No.1.3. tbca_opciones ..................................................................... 32 Tabla No.1.4. tbca_Subopciones .............................................................. 33 Tabla No.1.5. tbca_ubicacion .................................................................... 33 Tabla No.1.6. tbca_usuario....................................................................... 33 Tabla No.1.7. tbcab_ubic_opcion ............................................................. 34 Tabla No.1.8. tbpc_acumular_valores ...................................................... 34 Tabla No.1.9. Tabla: tbca_usuario ............................................................ 35 Tabla No.1.10. tbpp_mov_finaciero ........................................................... 35 Tabla No.1.11. tbpc_acumular_valores .................................................... 36 Tabla No.1.12. t bpv_categoria .................................................................. 36 Tabla No.1.13. tbpv_descarga.................................................................... 37 Tabla No.1.14. tbpv_idioma ........................................................................ 37 Tabla No.1.15. tbpv_detalle_descarga ...................................................... 38 Tabla No.1.16. tbpv_comentarios .............................................................. 38 Tabla No.1.17 tbpv_entidad....................................................................... 39 Tabla No.1.18. tbpv_mes ........................................................................... 39 Tabla No.1.19. tbpv_estado_producto ...................................................... 39 Tabla No.1.20. tbpv_pais .......................................................................... 40 Tabla No.1.21. tbpv_par_vizualizacion ..................................................... 40 XVIII Tabla No.1.22. tbpv_politica ...................................................................... 40 Tabla No.1.23. tbpv_producto_descargado .............................................. 41 Tabla No.1.24. tbpv_estado_producto ..................................................... 41 Tabla No.1.25 tbpv_tarifa........................................................................... 41 Tabla No.1.26. tbpv_producto_suscriptor ............................................... 42 Tabla No.1.27. tbpv_suscriptor .................................................................. 42 Tabla No.1.28 tbpv_producto_publicado .................................................. 43 CAPITULO I Manual Técnico En esta parte del proyecto se da una detallada explicación acerca del funcionamiento del proyecto incluyendo todos los subprocesos procesos que estén principales asociados y a nuestro portal. Se explica cómo los procesos están asociados unos con otros, para que su 20 modificación se pueda realizar de la manera más fácil, además de la configuración de la base de datos, de un modo sencillo, de tal forma que si se desea usar otro tipo de base de datos aparte de la proporcionada, se lo realice de un modo sencillo y práctico. El diseño de clases implementado respeta el esquema básico que se usa el lenguaje de programación. La modificación del código original queda bajo responsabilidad del administrador del programa. Para su uso posterior. 1.1 Diagrama de Casos de Uso 1.1.1 Registro de Usuario Visitar Pagina * * * «uses» Portal Web Registrar en el Portal «extends» Confirmar por correo «extends» Guardar Datos * «extends» «uses» «extends» Activar Cuenta Llenar formulario Validar Datos Navegante Web Gráfico No.1.1 Diagrama de casos de uso Registro de Usuario 20 21 1.1.1.1 Descripción del Caso de Uso - Registro de Usuario Toda persona deberá ingresar sus datos personales tales como: nombres, apellidos, alias, correo electrónico, contraseña, idioma, país, ciudad y teléfono; para poder crear una cuenta en nuestro Portal, estos datos serán validados; una ves que sea correctos se procederá a guardados en nuestra base de datos y le enviaremos un mail de confirmación para que pueda activar su cuenta. 1.1.2 Orden Suscripción. «uses» Logonear Registro Usuario «uses» Validar Contraseña «uses» Portal Web «uses» Orden Suscripcion Confirmación de Pago «uses» «uses» Validar Información Existente «uses» Simulador de Pago Usuario Guardar Datos de Pagos «extends» LLena Formalario Ingresar Datos Financieros Gráfico No.1.2 Diagrama de casos de uso Orden Suscripción 1.1.1.3 Descripción del Caso de Uso - Orden Suscripción Una vez que el usuario se encuentra registrado y haya activado 22 su cuenta podrá escoger la orden de suscripción que mejor le convenga para poder publicar sus contenidos. Esta orden de suscripción deberá ser pagada por medio de una tarjeta de crédito valida. Para el pago de tarjetas de crédito manejares un pequeño simulador de pagos el cual verificara nombre, apellido, número de tarjeta, nombre tarjeta, código, fecha de vencimiento, país, dirección, teléfono, e-mail. Para efectos del proyecto solo validaremos número de tarjeta, código y fecha de vencimiento. 23 1.1.3 Servicios del Portal Registro Usuario Portal Web Validar Contraseña «extends» Administrador Portal «uses» Usuario Contenidos Mayores de 2MG Logonear «extends» «extends» «uses» «uses» «extends» Publicar Informacion Contenidos Pendientes «extends» «uses» Verificar Estado de Cuenta «extends» «extends» Enviar Contenido al Portal «extends» Contenidos Menores de 2MG «uses» Suscripcion Activa «extends» Presentar Información Guardar Registro Compra «extends» «uses» Existir información Simulador Pago Descargar Informacion «extends» Confirmación de Pago «extends» Efectivizar pago «extends» «extends» Guardar Registro Compra Envio de Autorizacion de Pago «extends» Confirmacion de fondos Gráfico No.1.3 Diagrama de casos de uso Servicios del Portal 1.1.3.1 Descripción del Caso de Uso - Servicios del Portal Todo usuario registrado podrá gozar de los beneficios que brinda nuestro portal. Publicar contenido.- Una vez que el usuario tenga una suscripción activa podrá cargar archivos en nuestro portal, 24 estos archivos deberán ser subidos de acuerdo a la categoría, para que de esta manera los que quieran buscar información les sea mas fácil su localización. De igual manera es recomendable que el usuario escriba un pequeño resumen de la información a subir para que así los navegantes puedan hacer la búsqueda de forma rápida. Mi canasta.- Le permitirá ver un detalle de los productos comprados. Código Descripción Cantidad Valor Total. Además la canasta tiene la opción de eliminar algún archivo que ya no desee comprar. Estado de Cuenta.- Aquí el usuario podrá visualizar: Ordenes de compras pendientes Archivos que tiene para descarga Los cinco últimos contenidos publicados Ganancias del mes Ganancias de meses anteriores Numero de Transacción para cobrar por las descargas del mes 25 1.1.4 Consola Administrativa Usuario Portal Web «uses» Logonear «uses» Validar Contraseña Recepcion Contenidos «extends» «uses» «uses» Contenido Aprobado «uses» Evaluar Contenido Publica Contenido «uses» «uses» Contenido NO Aprobado «uses» «uses» «extends» Ver Estado de Cuenta por Suscriptor «extends» Guardar Registro Compra «uses» Actualizar Pagos a Suscriptores Registrar Pago Mantenimientos Gráfico No.1.4 Diagrama de casos de uso Consola Administrativa Publicar Contenidos 26 1.2 Diagramas de Estado 1.2.1 Registro Usuario [Ingresar a Nuestro Portal] [Llenar Formulario] Ingresando Datos Para Registrarse Visualizacion Políticas y Condiciones del Portal [Aceptar Políticas] [Comprar Datos / Datos Incorrectos] [Enviar e-mail para confirmación] [Comparar Datos / Datos Correctos] Recibir Información Validando Datos Gráfico No.1.5 Diagrama de estado Registro Usuario 1.2.1.1 Descripción de Diagrama de Estado - Registro Usuario El navegante para pertenecer a nuestro Portal Web deberá registrarse, donde primero conocerá de nuestras políticas y condiciones las misma que aceptara para poder seguir con el proceso, si la información es correcta será guardada en la base da datos si es incorrecta tendrá que volver a digitar datos validos. 27 1.2.2 Activación de Cuenta [Ingresar al Correo Personal] [Abrir Correo] Recibiendo Correo de Confirmación Direccionando a nuestro Portal Web [Aceptar Políticas] [Enviar e-mail para confirmación] Activando Cuenta Gráfico No.1.6 Diagrama de estado Activación de Cuenta 1.2.2.1 Descripción de Diagrama de Estado – Activación de Cuenta El usuario recibirá un e-mail de confirmación a su correo personal, al momento que el de clic en la dirección adjunta en el correo, automáticamente se activará la cuenta. 28 1.2.3 Servicios del Portal [Ingresar a Nuestro Portal] [Ingresar Usuario y Contraseña] [Comparar Usuario Usuario Correcto] Ingresando Datos Validando Usuario Seleccionado Opción [Comparar Usuario Usuario Incorrecto] [Descargar Contenido] [Publicar Contenido] [Evaluar Suscripcion] Validando Suscripción [Ingresar # Tarjeta] Ingresa Datos Financieros SIMULADOR DE PAGOS [Comprarar Datos Datos Financieros Incorrectos] [Suscripción Valida] [Comparar Datos Datos Financieros [Ver Correctos] Estado de Cuenta] [Suscripción Valida] Seleccionar Contenido a Subir Activando Suscripción [Enviar Contenido] Guardar Contenido [Visualizar Registro de la Compra] Seleccionar Contenido Bajando Contenido Seleccionado [Visualizar Valor a Pagar] [Visualizar Estado de Cuenta] Generando Estado de Cuenta [Descargar] Guardando Registro de la Compra Aceptando Valor de Compra [Comparar Datos Datos Financieros Correctos] [Realizar Pago de la compra] [Ingresar # Tarjeta] Ingresando Datos Financieros SIMULADOR DE PAGOS [Comparar Datos Datos Financieros Incorrectos] Gráfico No.1.7 Diagrama de estado Servicios del Portal 29 1.2.3.1 Descripción del Diagrama de Estado - Servicios del Portal El usuario para acceder a los servicios del portal deberá ingresar su alias y contraseña, una vez validado los datos podrá seleccionar que desea hacer: Si va por la opción de publicar contenidos al portal, deberá primero realizar la transacción financiera de la suscripción. Una vez validada esta suscripción el usuario podrá elegir que subir al portal. Si elige descargar contenidos del portal primero deberá seleccionar que desea bajar y luego realizará la transacción financiera correspondiente para efectuar la descarga. Todo usuario podrá ver su estado de cuenta, el cual presentará un listado de ordenes pendientes, contenidos por descargas, últimos publicados, ganancias del meses, ganancias de meses anteriores, numero de transacción para realizar el cobro por las descargas. 30 1.2.4 Consola Administrativa [Ingresar Usuario y Contraseña] [Ingresar a Consola Administrativa] Ingresando Datos [Comparar Administrador Usuario Correcto] Validando Administrador Seleccionado Opción [Comparar Administrador Usuario Incorrecto] [Mantenimientos] [Ver Estado de Cuenta por Suscriptor] [Controlar Contenido] [Elegir Contenido] Validando Contenido Evaluar Contenido [Reprobar Contenido] [Aprobar Contenido] Guardando Doc. para Publicar [Publicar] Guardando Doc. Rechazado [Controlar Pagos] [Proceso Concluido] [Visualizar Reporte Estado de Cuenta por Usuario] [Visualizar Reporte de los pagos a los usuarios-proveedores] [Generar Reporte] Presentando Reporte de E/C por usuario Visualizar E/C por usuario [Vizualizar Mantenimientos] Registrando Pagos a las cuentas de los usuarios Ejecutar los Mantenimientos [Seleccionar Usuario a Pagar ] Visualizando Usuarios Gráfico No.1.8 Diagrama de estado Consola Administrativa 1.2.5 Descripción de Diagrama de Estado - Consola Administrativa La consola administrativa será manejada por un usuario autorizado que tendrá la función de: 31 Evaluar todo contenido que va a ser publicado en nuestro portal y guardar un registro donde determinara que se publica y que no se publica. Visualizar los estados de cuentas por usuario para ver a quienes se les acreditara por descargas realizadas a sus contenidos en el mes. Actualizar los Estados de Cuentas correspondiente a los pagos mensuales. Realizar los mantenimientos requeridos por la Organización. 1.3 Diccionario de datos. Para el desarrollo de nuestra base de datos vamos a utilizar el Modelo conocido como entidad relación (DER), y nuestra base de datos está compuesta por la siguiente clasificación: 1.3.1 Tablas Control de Aplicaciones. Estas tablas son utilizadas para la generación del sitio tanto para el portal mostrado a los navegantes y el portal de administración. 32 Venta de Información Por suscripción Tabla: tbca_aplicacion Observación: Tabla donde se guarda el nombre de aplicación web es decir si es del portal o consola de administracion Descripción Clave Ref Campo Tipo de dato SI NO cap_clave Int Primary Key , autoincremental NO NO cap_descripcion Varchar Descripción de la tabla NO NO cap_estado Char Estado puede ser A o I Tabla No.1.1. tbca_aplicacion Venta de Información Por suscripción Tabla: tbca_documento Observación: En esta tabla se registra Ref Campo Tipo de dato Descripción SI NO cdo_clave int Primary Key, autoincremental NO NO cdo_contenido text Contenido del documento NO NO cdo_estado varchar Estado puede ser A o I NO NO cdo_titulo varchar Titulo del documento NO NO cdo_politica varchar Bandera si es politica o no Clave Tabla No.1.2. tbca_documento Venta de Información Por suscripción Tabla: tbca_opciones Observación: Tabla que contiene el nombre de la opcion que presta o las aplicaciones Descripción Clave Ref Campo Tipo de dato SI NO cop_clave int Primary Key de la tabla SI SI int FORENG Key de la tabla tbca_aplicacion NO NO cop_estado varchar Estado puede ser A o I NO NO cop_descripcion varchar Nombre breve cop_apliacion Tabla No.1.3. tbca_opciones 33 Venta de Información Por suscripción Tabla: tbca_subopciones Observación: Tabla que contiene las subopciones que tiene las opciones Descripción Clave Ref Campo Tipo de dato SI NO cso_clave int Primary Key de la tabla SI SI int Foreng Key de la tabla tbca_opciones NO NO cso_descripcion varchar Sombre del Link NO NO cos_link varchar Direccionamiento del link NO NO cos_estado varchar Estado puede ser A o I NO NO cos_nemonico varchar Sufijos de las subopciones cso_opcion Tabla No.1.4. tbca_Subopciones Venta de Información Por suscripción Tabla: tbca_ubicacion Observación: Tabla que contiene el nombre de las ubicaciones Clave Ref Campo Tipo de dato Descripción SI NO cub_clave Int Primary Key de la tabla NO NO cub_descripcion varchar Nombre breve NO NO cub_estado varchar Estado puede ser A o I Tabla No.1.5. tbca_ubicacion Venta de Información Por suscripción Tabla: tbca_usuario Observación: Tabla que contiene los registros de los usuarios que administran el portal Descripción Clave Ref Campo Tipo de dato SI NO cub_clave Int Primary Key de la tabla NO NO cub_descripcion varchar Nombre breve NO NO cub_estado varchar Estado puede ser A o I Tabla No.1.6. tbca_usuario 34 Venta de Información Por suscripción Tabla: tbcab_ubic_opcion Observación: Tabla que la relacion de las opciones con la ubicación Clave Ref Campo Tipo de dato Descripción SI NO cuo_ubicacion int Primary Key de la tabla SI NO cuo_opcion int Primary Key de la tabla Tabla No.1.7. tbcab_ubic_opcion Venta de Información Por suscripción Tabla: tbpc_acumular_valores Observación: Tabla que contiene los registros de los usuarios que administran el portal Descripción Clave Ref Campo Tipo de dato SI NO wac_anio int Primary Key de la tabla SI NO wac_mes int Primary Key de la tabla NO NO wac_neto float Valor neto de pago NO NO wac_comision float Valor de la comision obtenida para el portal NO NO wac_fecha datetime Fecha de la transaccion NO NO wac_alias varchar Usuario dueño del contenido NO NO wac_acumulado varchar Bandera NO NO wac_pagado varchar Bandera de efectivizacion NO NO wac_estado varchar Estado puede ser A o I Tabla No.1.8. tbpc_acumular_valores 1.3.2 Tablas Portal de Pago Tablas que tienen que ver con el Simulador de Pagos. Gracias a estas tablas se realiza la simulación de los pagos realizados en web. 35 Venta de Información Por suscripción Tabla: tbpp_datos_financiero Observación: Tabla de registros de datos dueños de tarjeta pertenece a la simulación de pago SI NO pdf_tipo_cuenta int SI NO pdf_nombre varchar SI NO pdf_apellido varchar SI NO pdf_num_tarjeta varchar Descripción Primary Key,Tipo de cuenta Puede ser 1 0 2 Primary Key, Nombre del dueño de tarjeta Primary Key, Apellido del dueño de tarjeta Primary Key, Numero de tarjeta NO NO pdf_mes int mes de caducidad NO NO pdf_anio int año de caducidad NO NO pdf_pais int país de procedencia NO NO pdf_ciudad varchar ciudad de procedencia NO NO pdf_mail varchar email del dueño para referencia NO NO pdf_telefono varchar teléfono de referencia NO NO pdf_direccion varchar dirección NO NO pdf_contrasena varchar contraseña de tarjeta (encriptado) Clave Ref Campo Tipo de dato Tabla No.1.9. Tabla: tbca_usuario Venta de Información Por suscripción Tabla: tbpp_mov_finaciero Observación: Se registra los movimientos de pagos realizados por el simulador Descripción Clave Ref Campo Tipo de dato SI NO pmf_clave int Primary Key de la tabla NO NO pmf_factura int Factura o Orden de descarga NO NO pmf_tipo_tarjeta int tipo de tarjeta puede ser 1o 2 NO NO pmf_valor decimal Valor de pago NO NO pmf_fecha datetime Fecha de cancelacion NO NO pmf_tipo_fact varchar Tipo de documento NO NO pmf_num_tarjeta varchar Numero de la tarjeta NO NO pmf_emisor varchar Nombre de la pagina de procedencia NO NO pmf_codigo Varchar Codigo Tabla No.1.10. tbpp_mov_finaciero 36 1.3.3 Tablas Portal de venta En esta sección se encuentran las tablas que conforman el proyecto Aquídescarga.com. Las cuales son de vital importancia al sitio. Venta de Información Por suscripción Tabla: tbpv_anio Observación: Registro de los años Clave Ref Campo Tipo de dato SI NO NO NO NO wan_fecha_inicio NO wan_fecha_fin NO NO wan_estado wan_anio int datetime datetime varchar Descripción Primary Key de la tabla, año fiscal fecha de inicio fecha de final Estado puede ser A o I Tabla No.1.11. tbpc_acumular_valores Venta de Información Por suscripción Tabla: tbpv_categoria Observación: Datos correspondientes a la categoria Ref Campo Tipo de dato Descripción SI NO wcp_codigo int Primary Key de la tabla NO NO wcp_retencion int Porcentaje de ganacia no usado en la actualidad NO NO wcp_inicial varchar Iniciales de la categoria NO NO wcp_descripcion varchar Descripción de la categoria NO NO wcp_archivo varchar Nombre del archivo de imagen NO NO wcp_contenido varchar Breve descripción NO NO wcp_estado varchar Estado puede ser A o I Clave Tabla No.1.12. t bpv_categoria 37 Venta de Información Por suscripción Tabla: tbpv_descarga Observación: Cabecera de descargas Datos principales de la orden de descarga Ref Campo Tipo de dato Descripción SI NO wde_numero float Primary Key de la tabla NO NO wde_total_neto int Total Neto de la descarga NO NO wde_total_comision int Total de las comisiones NO NO wde_total int Total suma de Neto y Comision NO NO wde_fecha datetime Fecha de orden NO NO wde_fecha_efectivo datetime fecha de efectivo NO NO wde_tipo_tarjeta int tipo de tarjeta NO NO wde_num_tarjeta varchar numero de tarjeta NO NO wde_estado varchar Estado puede ser A o I NO NO wde_num_pago varchar numero de autorizacion NO NO wde_nombre_apellido varchar nombre y apellido del dueño de la tarjeta NO NO wde_vencimiento varchar fecha de vencimiento NO NO wde_ban_efec varchar bandera de efectivización NO NO wde_alias_comprador varchar Alias del suscriptor que realiza la compra Clave Tabla No.1.13. tbpv_descarga Venta de Información Por suscripción Tabla: tbpv_idioma Observación: Idiomas existentes. Clave SI NO NO Ref Campo NO wid_codigo NO wid_descripcion NO wid_estado varchar Descripción Primary Key de la tabla, autoincremental Descripción varchar Estado puede ser A o I Tipo de dato int Tabla No.1.14. tbpv_idioma 38 Venta de Información Por suscripción Tabla: tbpv_detalle_descarga Observación: detalle de descargas Clave Ref Campo Tipo de dato Descripción SI NO wdd_numero float Primary Key de la tabla SI NO wdd_secuencia int Primary Key de la tabla NO SI float Producto, foreng key NO NO wdd_valor_comision int Valor de comision NO NO wdd_porc_com int porcentaje de comision NO NO wdd_fecha datetime fecha de orden NO NO wdd_valor_total int NO NO wdd_cantidad int NO NO wdd_fecha_efectivo datetime valor cantidad de articulos siempre es 1 fecha de efectivizacion de pago NO NO wdd_valor_neto int valor neto NO NO wdd_tipo_tarjeta int tipo de tarjeta de credito NO NO wdd_f_caducidad varchar fecha de caducidad de tarjeta NO NO wdd_num_tarjeta varchar numero de tarjeta NO NO wdd_ban_efec varchar bandera de efectivizacion NO NO wdd_estado varchar Estado puede ser A o I NO NO wdd_num_pago varchar numero de autorizacion NO NO wdd_nombre_apellido varchar nombre del dueño de tarjeta NO NO wdd_alias_bajado varchar alias del dueño de contenido NO NO wdd_alias_compra varchar alias del compra de contenido wdd_cod_producto Tabla No.1.15. tbpv_detalle_descarga Venta de Información Por suscripción Tabla: tbpv_comentarios Observación: Registro de comentarios enviados por los visitantes. Ref Campo Tipo de dato Descripción SI NO wcm_clave int Primary Key de la tabla, autosecuencia NO NO wcm_contenido text Contenido del documento este puede ser html NO NO wcm_leido varchar Iniciales de la categoria NO NO wcm_nombre varchar Descripción de la categoria NO NO wcm_email varchar email del visitante NO NO wcm_titulo varchar Titulo del comentario Clave Tabla No.1.16. tbpv_comentarios 39 Venta de Información Por suscripción Tabla: tbpv_entidad Observación: Registro de los años Ref Campo Tipo de dato Descripción SI NO wen_codigo int Primary Key de la tabla, autoincremental NO NO wen_descripcion varchar Descripción NO NO wen_estado varchar Estado puede ser A o I Clave Tabla No.1.17 tbpv_entidad Venta de Información Por suscripción Tabla: tbpv_mes Observación: Meses existente en el año Tipo de dato Descripción int Primary Key de la tabla, autoincremental NO Ref Campo NO wms_mes NO wms_nombre varchar Descripción NO NO wms_estado varchar Estado puede ser A o I Clave SI Tabla No.1.18. tbpv_mes Venta de Información Por suscripción Tabla: tbpv_estado_producto Observación: Estados del producto Ej: Pendiente Ref Campo Tipo de dato Descripción SI NO wep_codigo int Primary Key de la tabla, autoincremental NO NO wep_descripcion varchar Descripción NO NO wep_estado varchar Estado puede ser A o I Clave Tabla No.1.19. tbpv_estado_producto 40 Venta de Información Por suscripción Tabla: tbpv_pais Observación: Paises existentes del mundo Ref Campo Tipo de dato Descripción SI NO wpa_codigo Int Primary Key de la tabla, autoincremental NO NO wpa_descripcion Varchar Descripción NO NO wpa_estado Varchar Estado puede ser A o I Clave Tabla No.1.20. tbpv_pais Venta de Información Por suscripción Tabla: tbpv_par_vizualizacion Observación: Top de presentacion de consultas Clave Ref Campo Tipo de dato Descripción SI NO cpv_clave Int Primary Key de la tabla, autoincremental NO NO cpv_top Int El hasta de vizualizacion NO NO cpv_estado Varchar Estado puede ser A o I NO NO cpv_descripcion Varchar Nombre del Top NO NO cpv_nemonico Varchar Iniciales Tabla No.1.21. tbpv_par_vizualizacion Venta de Información Por suscripción Tabla: tbpv_politica Observación: Politicas de contraseñas. Tipo de dato Descripción Int Primary Key de la tabla, autoincremental NO Ref Campo NO wpo_codigo NO wpo_letras Int Limites de letras NO NO wpo_numeros Int Limites de Numeros NO NO wpo_simbolos Int Limites de simbolos NO NO wpo_cant_min Int minimo de digito NO NO wpo_cant_max Int maximo de digitos Clave SI Tabla No.1.22. tbpv_politica 41 Venta de Información Por suscripción Tabla: tbpv_producto_descargado Observación: Politicas de contraseñas. Clave SI Ref Campo Tipo de dato Descripción NO wpd_clave Float Primary Key de la tabla SI NO wpd_producto Float Primary Key de la tabla NO NO wpd_contador Int Contador de descarga NO NO wpd_contador_maximo Int Limites de veces de descargas NO NO wpd_fecha_descarga Datetime fecha de descargas NO NO wpd_fecha_maxima Datetime fecha limite de descargas NO NO wpd_alias_compra Varchar alias del usuario que compra NO NO wpd_ban_realizado Varchar bandera de realizado o efectuado Tabla No.1.23. tbpv_producto_descargado Venta de Información Por suscripción Tabla: tbpv_estado_producto Observación: Estados del producto Ej: Pendiente Tipo de dato Descripción int Primary Key de la tabla, autoincremental NO Ref Campo NO wtt_codigo NO wtt_descripcion varchar Descripción NO NO wtt_estado varchar Estado puede ser A o I Clave SI Tabla No.1.24. tbpv_estado_producto Venta de Información Por suscripción Tabla: tbpv_tarifa Observación: Tarifa existentes que brindan el portal Campo Tipo de dato Descripción wta_codigo int Primarey Key NO wta_valor int costo de tarifa NO NO wta_duracion float duracion de tarifa(meses) NO NO wta_descripcion varchar descripcion de la tarifa NO NO wta_estado varchar Estado puede ser A o I Clave SI Ref NO NO Tabla No.1.25 tbpv_tarifa 42 Venta de Información Por suscripción Tabla: tbpv_producto_suscriptor Observación: Tabla que contiene las descargas por producto y dueno de contenido. Descripción Clave Ref Campo Tipo de dato SI NO wps_clave float Primary Key de la tabla SI NO wps_anio int Primary Key de la tabla SI NO wps_mes int Primary Key de la tabla NO NO wps_contador float Total de descargas NO NO wps_neto float neto a recibir NO NO wps_valor_comision float valor de la comision NO NO wps_valor_total float valor total NO NO wps_ban_realizado varchar bandera de realizado NO NO wps_alias_publicado varchar alias del publicante NO NO wps_cont_cifrado varchar contado cifrado(No utilizado) Tabla No.1.26. tbpv_producto_suscriptor Venta de Información Por suscripción Tabla: tbpv_suscriptor Observación: Registros de suscriptores inscritos a nuetro portal (Datos de Registro) Descripción Clave Ref Campo Tipo de dato NO NO wsu_alias varchar Usuario, Primarey Key NO SI wsu_pais int pais NO SI wsu_idioma int Idioma NO NO wsu_entidad int Entidad de pago NO NO wsu_nombre varchar Nombre del suscriptor NO NO wsu_contrasena varchar contraseña encriptada md5 NO NO wsu_estado varchar Estado puede ser A o I NO NO wsu_apellido varchar Apellido del suscriptor SI NO wsu_email varchar email del suscriptor Tabla No.1.27. tbpv_suscriptor 43 Venta de Información Por suscripción Tabla: tbpv_producto_publicado Observación: Tabla los contenidos que se publican Campo Tipo de dato Descripción NO wpp_clave float Primary Key de la tabla NO NO wpp_precio int Precio del contenido NO SI wpp_categoria int Categoria NO SI wpp_fecha_publicacion datetime Fecha de publicacion NO NO wpp_numero_descarga int Numero de descarga de contenido NO NO wpp_precio_publico int Precio al publica NO NO wpp_estado int Estado puede ser A o I NO NO wpp_tipo_motivo int no utilizado NO NO wpp_archivo text contenido de archivo (no utilizado) NO NO wpp_archivo_resumen text resumen(no utilizado) NO NO wpp_tm_archivo decimal Tamaño de archivo principal NO NO wpp_tm_resumen decimal Tamaño de archivo resumen NO NO wpp_porcentaje float porcentaje de ganancia por articulo NO NO wpp_nombre_resumen varchar nombre del contenido de resumen NO NO wpp_oferta varchar bandera que indica si se encuentra en oferta NO NO wpp_direccion_resumen varchar direccion fisica del resumen NO NO wpp_tipo_archivo varchar tipo del archivo principal de contenido NO NO wpp_tipo_resumen varchar tipo del archivo resumen de contenido NO NO wpp_nombre_archivo varchar nombre del contenido principal NO NO wpp_resumen varchar nombre del contenido principal NO NO wpp_alias varchar alias del suscriptor dueño NO NO wpp_direccion varchar direccion fisica del contenido principal NO NO wpp_descripcion varchar breve descripcion del tema NO NO wpp_codigo varchar codigo generado x la categoria y el id del contenido Clave SI Ref Tabla No.1.28 tbpv_producto_publicado 44 1.4 Páginas y Clase del Proyecto Por cada pagina se ira explicando el uso de la misma, de una manera detallada de las paginas que presenta los procesos principales. La mayoría de las páginas heredan de las clases que se encuentran en la carpeta lib. Gracias a las propiedades heredadas de las plantillas ayudan para tener una programación más ordenada y fácil de comprender. La función de Preproceso recepta los parámetros enviados por otras páginas o si misma en dichos parámetros llegan acciones que se ejecutan al instante. Función SeccionCentroMostrarHtml esta función realiza la presentación en el centro de las páginas para la visualización del contenido. 1.4.1 DB_mysql.class Clase que realiza la conexión con la base de datos en nuestro caso con la base llamada web en mySql, accediendo con el servidor, usuario y pasword como parámetros en el constructor. Si no se envían parámetros toma los que contienen por default. Ubicación: /lib/clase/funciones/ DB_mysql.php 45 <?php class DB_mysql { /* variables de conexión */ var $BaseDatos; var $Servidor; var $Usuario; var $Clave; /* identificador de conexión y consulta */ var $Conexion_ID = 0; var $Consulta_ID = 0; /* número de error y texto error */ var $Errno = 0; var $Error = ""; /* Método Constructor: Cada vez que creemos una variable de esta clase, se ejecutará esta función */ function __construct($bd="web",$host="localhost",$user="root",$pass="") { $this->BaseDatos=$bd; $this->Servidor=$host; $this->Usuario=$user; $this->Clave=$pass; $this->conectar($this->BaseDatos,$this->Servidor,$this->Usuario,$this->Clave); } /*Conexión a la base de datos*/ function conectar($bd="web",$host="localhost",$user="root",$pass="") //function conectar($bd, $host, $user, $pass) { if ($bd != "") $this->BaseDatos = $bd; if ($host != "") $this->Servidor = $host; if ($user != "") $this->Usuario = $user; if ($pass != "") $this->Clave = $pass; // Conectamos al servidor //echo $this->Servidor; $this->Conexion_ID = mysql_connect($this->Servidor, $this->Usuario, $this>Clave); if (!$this->Conexion_ID) { $this->Error = "Ha fallado la conexión."; die('error: '.$this->Error); return 0; } if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) { $this->Error = "Imposible abrir ".$this->BaseDatos ; die('error: '.$this->Error); return 0; } /* Si hemos tenido éxito conectando devuelve el identificador de la conexión, sino devuelve 0 */ return $this->Conexion_ID; } // cierra la conexion public function __sleep() { mysql_close($this->Conexion_ID); } }?> Gráfico No. 1.9a. Clase DB_mysql 46 1.4.2 BarraMenu.class Clase que genera la barra de menu de nuestro portal. Realiza una consulta a la base de datos dependiendo que parámetros sea enviado genera el menú superior tanto para el portal y el administrador del portal Ubicacion: /lib/BarraMenu.class.php <?php class BarraMenu { var $botones; var $array; var $ok; function BarraMenu($opcion=1) { /* * Funcion que genera el menu de opciones * Dinamicamente */ $this->botones=array(); // inicializa como array $this->array=array(); // incializa como array $this->ok=0; $mytransubopciones= new cls_tranSubopciones(); // crea un objeto /* * llama a la funcion consulta_opcion */ $mytransubopciones->consulta_opcion($opcion,$this->array,$this->ok); if ($this->ok==1)// busqueda exitosa { $i=0; while($i<count($this->array)) { /* * crea un vinculo creando un objeto VinculoUrl */ $myvinculo = new VinculoUrl($this->array[$i]->getDescripcion(), config_live_site.$this>array[$i]->getlinks()); $this->botones[$myvinculo->etiqueta] = $myvinculo; // asigna $i++; } } } Gráfico No.1.10a Clase BarraMenu 47 function Mostrar() { /* * Presenta el menu generado * crea un tabla */ echo "<table width=\"80%\" height=\"20\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"12\"><tr>"; foreach($this->botones as $id => $item) // ciclo repetitivo { echo "<td class=\"layout_barramenuboton\">"; $item->Mostrar(); echo "</td>"; } echo "</tr></table>"; // cierra la tabla } ?> } Gráfico No.1.10b Clase BarraMenu 1.4.3 CuadroHtml.class. Clase que genera y va añadiendo celdas a las tablas, estas tablas pueden ser simples, de búsqueda o zebras. Ubicacion: /lib/ CuadroHtml.class.php <?php class CuadroHtml{ /** * Clase que genera los diferentes cuadros **/ var $Titulo; // titulo var $Celdas; // celdas var $maxCol; // maximo de columna var $maxFil; // maximo de fila var $ancho; // ancho var $cssEstilo; // estilo de la clase var $Border; // borde si o no var $bicolor; // generacion bi color si no var $pie; // strin de presentacion en pie var $preSub; // bandera de presentacion var $oculta; // ban de ocultar var $ocultar; var $prepie; // bandera de presenta pie Gráfico No. 1.11a Clase Cuadrohtml 48 function CuadroHtml($titulo="",$ancho=0,$estilo="",$border=0,$bicolor=0, $pie="",$prepie=0,$preSub=0,$ocultar=0){ /* * Constructor de la clase * recibe los parametros que se utilizan */ $this->Titulo=$titulo; $this->Celdas=array(); $this->maxFil=0; $this->maxCol=0; $this->ancho = $ancho; $this->Border = $border; $this->cssEstilo = "layout_cuadro" . $estilo; $this->Border=$border; $this->bicolor=$bicolor; $this->pie=$pie; $this->preSub=$preSub; $this->oculta=" style = 'border-bottom:thin none; border-top:thin none; border-left: thin none; border-right:thin none'"; $this->ocultar=$ocultar; $this->prepie=$prepie; } function Agregar($columna,$fila, $valor){ /* * Funcion que agrega el items en las filas y columnas */ if ($columna > $this->maxCol) $this->maxCol = $columna; if ($fila > $this->maxFil) $this->maxFil = $fila; $this->Celdas[$columna][$fila] = $valor; } function Vaciar(){ /* * Funcion que presenta el cuadro completo * */ $cssEstiloFondo = $this->cssEstilo . "fondo"; $cssEstiloTitulo = $this->cssEstilo . "titulo"; $cssEstiloSubtitulo = $this->cssEstilo . "subtitulo"; $cssEstiloItem = $this->cssEstilo . "item"; $cssEstiloItems = $this->cssEstilo . "items"; $cssEstiloPie = $this->cssEstilo . "pie"; $cssAncho = " style=\"width: " . $this->ancho . "px;\""; $tituloPadding = $this->maxCol+1; $text="<div class=\"$cssEstiloFondo\" $cssAncho >"; $text.="<table border ='".$this->Border; $text.="' cellspacing='0' cellpadding='$2' width=100% >"; if ($this->Titulo!="") if ($this->preSub==0) { $text.="<tr class=\"$cssEstiloTitulo\"><td colspan=\"$tituloPadding\">" . $this->Titulo . "</td></tr>"; } else { $text.="<tr class=\"$cssEstiloTitulo\"><td colspan=\"$tituloPadding\"> &nbsp;</td></tr>"; $text.="<tr class=\"$cssEstiloTitulo\"><td colspan=\"$tituloPadding\">" . $this->Titulo . "</td></tr>"; } Gráfico No.1.11b Clase Cuadro html 49 for($fila=0;$fila<=$this->maxFil;$fila++){ $text.="<tr>"; for($columna=0;$columna<=$this->maxCol;$columna++){ if ($this->preSub<>0) //si pressub !=0 { if ($fila==0) { $text.="<td"; if ($this->ocultar==1) { $text.=$this->oculta; } $text.= " ><p class=\"$cssEstiloSubtitulo\">"; } } if ($this->preSub==0) { if ($fila==0) { $text.="<td"; if ($this->ocultar==1) { $text.=$this->oculta; } $text.= " ><p class=\"$cssEstiloItem\">"; } } if ($this->bicolor==1) { if ($fila>0) { if(($fila%2)!=0) { $text.="<td"; if ($this->ocultar===1) { $text.=$this->oculta; } $text.=" ><p class=\"$cssEstiloItem\">"; } else { $text.="<td"; if ($this->ocultar===1) { $text.=$this->oculta;} $text.=" ><p class=\"$cssEstiloItems\">"; } } } if ($this->bicolor==0) { if ($fila>0) { $text.="<td>"; if ($this->ocultar==1) { $text.=$this->oculta; } $text.=" ><p class=\"$cssEstiloItem\">"; } } if (isset($this->Celdas[$columna][$fila])) $text.= $this->Celdas[$columna][$fila]; $text.="</p></td>"; } Gráfico No.1.11c Clase Cuadro html 50 $text.="</tr>"; } if ($this->prepie==1) { $text.="<tr class=\"$cssEstiloPie\"><td colspan=\"$tituloPadding\" align=\"center\">".$this>pie."</td></tr>"; } $text.= "</table>"; $text.= "</div>"; return $text; } function MostrarHtml(){ echo $this->Vaciar(); } } ?> Gráfico No.1.11d Clase CuadroHtml 1.4.4 Funciones.php Function fnRnd Esta función realiza un calculo aleatorio de numero.recibe los rangos de generación Function Seccion_Star Esta función genera la sesión tanto para el usuario como para la canastade compra. 51 <?php /* * Funciones auxiliares */ function fnRnd($min,$max) { /* * Funcion que genera randon */ srand((double)microtime()*1000000);// funcion aleatoria $randvalor=rand($min,$max); return $randvalor; } function Seccion_Star() { /* * Funcion que genera session */ session_start();// inicio de seccion if (!isset($_SESSION['usuario'])) { $_SESSION["canasta"]=NULL; $_SESSION["seguro"]=fnRnd(1000,9999);// llamada de funcion aleatoria } } ?> Ubicación: /lib/ funciones.php Gráfico No.1.12a. funciones.php 1.4.5 VinculoUrl.class. Clase que genera los links para las páginas web Ubicación: /lib/ VinculoUrl.class.php <?php class VinculoUrl{ /* * clase que genera los links */ var $etiqueta; var $pagina; var $parametros; var $cssClass; var $extra; function VinculoUrl($etiqueta,$pagina,$cssClass='',$extra=''){ /* * constructor de las clases */ Gráfico No.1.13a. Clase VinculoUrl.class 52 $this->etiqueta=$etiqueta; $this->pagina=$pagina; $this->parametros=array();// asignacion de array $this->cssClass=$cssClass; $this->extra = $extra; } function Agregar($param,$valor){ /* * funcion que agrega links */ $this->parametros[$param]=$valor; // asignacion } function Vaciar(){ /* * Funcion que presenta los links */ $texto =""; $pagina = $this->pagina; $etiqueta = $this->etiqueta; $cssClass = $this->cssClass; $extra = $this->extra; $cssCode =""; $url="$pagina"; foreach($this->parametros as $id => $item){ $url.=$id . "=" . $item . "&"; } if ($cssClass!='') $cssCode = " class=\"$cssClass\" "; $texto = "<a href=\"$url\" $cssCode $extra >$etiqueta</a>"; return $texto; } /* * Funcion que presenta los links */ function Mostrar(){ echo $this->Vaciar(); } } ?> Gráfico No.1.13b Clase VinculoUrl.class 1.4.6 PlantillaHtml.class.php Clase que genera la plantilla principal de nuestro proyecto de la cual es heredada de diferentes paginas. Esta dividida en 4 sectores como 53 lo son: Parte superior donde se encuentra ubicado la imagen de publicidad de nuestro portal. La parte de la barra de menú donde se presentan las opciones que tiene acceso los navegantes. Presentación de bienvenida del usuario se presenta la opción que nos indica que si se encuentra iniciada una opción o le da el mensaje para hacerlo Lado Izquierdo donde se presentan las subopciones o submenús que presenta nuestro portal como lo son el ingreso de usuario, el menú de acceso, visualización previa de la canasta y el top de descargas. Lado derecho se presentan opciones como la búsqueda de contenido, las categorías mas descargados, recientemente. Ubicación: /lib/ PlantillaHtml.class.php los contenidos publicados 54 <?php // incluye librerias include_once("funciones.php"); class PlantillaHtml { /* * Plantilla principal de nuestro portal */ var $Titulo; var $MostrarSeccionDerecha=true; var $array; var $ok; var $izquierdo; var $aplicacion; // constructor function PlantillaHtml($titulopagina) { $this->Titulo= $titulopagina; // titulo $this->PreProcesoSystema(); // llama PreProcesoSystema() $this->PreProceso(); // llama PreProceso() } function MostrarHtml() { /* *divicion de las celdas para la presentacion del pagina * Codigo realizado en html pero llama a funciones php */ ?> <html> <head> <title>AquiDescarga :: <?php echo $this->Titulo ?></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="layout.css" rel="stylesheet" type="text/css"> </head> <body class="pagina"> <table border="0" align="center" cellpadding="0" cellspacing="0" width="800"> <tr> <td align="right" valign="middle"> <div class="layout_pagina"><!--corresponde al marco de nuestro proyecto--> <div class="layout_titulo"><!--corresponde al dintel de nuestro proyecto--> <div class="layout_barramenu"><!--corresponde a la barra principal de la pagina--> <?php $miBarraMenu = new BarraMenu(); $miBarraMenu->Mostrar(); ?> </div> </div> <div class="layout_cuerpo"> <table width="790" border="0" cellpadding="0" cellspacing="0"> <tr align="right" valign="top"> <td height="46" colspan="3" valign="bottom"><p class="layout_cuerpousername"><span class="layout_cuerpousername"> // llama SeccionSuperiorMostrarHtml <?php $this->SeccionSuperiorMostrarHtml();?> </span></p> Gráfico No.1.14a. Clase PlantillaHtml.class 55 </td> </tr> <tr> <td width='160' align="left" valign="top" > // llama SeccionIzquierdaMostrarHtml <?php $this->SeccionIzquierdaMostrarHtml(); ?></td> <td align="center" valign="top" class="layout_cuerpocentro2" > <?php $this->SeccionCentroMostrarHtml(); ?> </td> <?php if ($this->MostrarSeccionDerecha===true){ ?> <td width="165" align="center" valign="top"> // llama SeccionDerechaMostrarHtml <?php $this->SeccionDerechaMostrarHtml(); ?> </td> <?php } else { ?> <td width="12" align="center" valign="top"> </td> <?php } ?> </tr> <tr> <td colspan="3" class="layout_cuerpobotton"> // llama seccioninferiormostrar <?php $this->seccioninferiormostrar();?> <BR>www.AquiDescarga.com <br> Derechos Reservados (c) 2007 </td> </tr> </table> </div> </div> </td></tr></table> </body> </html> <?php }//fin funcion MostrarHtml Gráfico No.1.14b Clase PlantillaHtml.class 56 function SeccionIzquierdaMostrarHtml() { /* * Muestra en la parte de izquierda * el numero de Movimientos que ha realizado * en el carro de compra. * Top five * Lo ultimo publicado */ $this->array=array(); $this->ok=0; //*************************************CUADRO CANASTA****************** if(isset($_SESSION['usuario'])) { if(isset($_SESSION["canasta"])) { $canasta=$_SESSION["canasta"]; } else { $canasta=NULL;} require_once("configuration.php"); $mybox = new CuadroHtml('Mi Canasta','150',3,0,0, "",0,0,1); /* * arma la tabla del titulo del submenu */ ?> <table border ='0' cellspacing='0' width=100> <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."canasta_view.php";?>'" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Mi Canasta</TD> </TR> </TBODY> </TABLE> <?php if($canasta<>NULL) { $total=0; $items=0; foreach($canasta as $item => $valor ) { $this->ok=0; $myproducto =new cls_producto_publicado(); $mytransproducto =new cls_transproducto_publicado(); $myproducto->setClave($item); $mytransproducto->consulta_producto($myproducto,$this->ok); Gráfico No.1.14c Clase PlantillaHtml.class 57 if ($this->ok==1) { $pvp=$myproducto>getPrecio_publico(); $subtotal = ($pvp*$valor); $total = $total + $subtotal; $items = $items+$valor; } } /* * Arma la opcion del sub menu */ ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20> </TD> <TD class=linksec height=20> <div align="center"><?php echo "Contenido [".$items."]"; ?></div> </TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20> <div align="center"><?php echo " Total: <FONT color=red>".config_signo."&nbsp;".number_format($total, 2, '.', ',')."</font>"; ?></div> </TD> </TR> </TBODY> </TABLE> <?php } else { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20><?php echo '&nbsp'; ?></TD> <TD class=linksec height=20> </TD> Gráfico No.1.14d Clase PlantillaHtml.class 58 </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>Vacio </TD> </TR> </TBODY> </TABLE> <?php } if ($canasta==NULL) { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20><?php echo '&nbsp'; ?></TD> <TD class=linksec height=20> </TD> </TR> </TBODY> </TABLE> <?php } else { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."orden.php?opcion=2&user=".$_SESSION['usuario'];?>'" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Realizar Pago</TD> </TR> </TBODY> </TABLE> <?php } echo "<br>"; } /* * Items de presentacion */ Gráfico No.1.14e Clase PlantillaHtml.class 59 $this->array=array(); $arrays=array(); $this->izquierdo=2; $this->aplicacion=1; $this->ok=0; $oks=0; $Mitranopciones= new cls_tranopciones(); $Mitranopciones->consulta_margen($this->izquierdo,$this->aplicacion,$this->array,$this->ok); if ($this->ok==1) { $i=0; while($i<count($this->array)) { /*Estas tabla corresponde al cuadro_titulo de las subopciones de nuestro portal que se encuentra en nuestra plantillahtml*/ ?> <table border ='0' cellspacing='0' width=100> <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php $j++; } if(isset($_SESSION['usuario'])) { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."orden_suscripcion.php";?>'" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.:Pago Suscripcion</TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."cargar_archivos.php";?>'" Gráfico No.1.14f Clase PlantillaHtml.class 60 onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.:Subir Archivo</TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <?php } } echo "<br>"; $arrays=array(); $i++; } } //******************************************************************************************** if(!isset($_SESSION['usuario'])) { echo "<SCRIPT Language=Javascript SRC='jscript/md5.js'></SCRIPT>"; echo "<form action='".config_live_site."login.php'method=\"get\" enctype=\"application/x-www-form-urlencoded\" >"; ?> <table border ='0' cellspacing='0' width=100> <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Usuario</TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php echo "<input type=\"text\" id=\"username\" name=\"username\" class='layout_peq' size=\"22\" maxlength=\"45\">"; ?> </TD> </TR> </TBODY> </TABLE> Gráfico No.1.14g. Clase PlantillaHtml.class 61 <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Contraseña </TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php echo "<input type=\"password\" id=\"password\" class='layout_peq' name=\"password\" size=\"22\" maxlength=\"45\" onKeyUp=md5password.value=(hex_md5(password.value)) >"; ?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"submit\" name=\"Submit\" value=\"Ingresar\" class='layout_peq' >";?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."formulario_registro.php";?>'" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20> <FONT color=blue>.: Registrate AQUI </FONT></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <?php echo "<input type=\"hidden\" id=\"md5password\" class='layout_peq' name=\"md5password\" size=\"10\" >"; echo "</form>"; } Gráfico No.1.14h. Clase PlantillaHtml.class 62 //*************************************CUADRO TOP ***************************************** if ($this->Titulo!='Top') { $mytranstop5= new cls_transproducto_publicado(); // crea un objeto cls_transproducto_publicado $mytranstop5->consulta_vectorTOP5($this->array,$this->ok);// consulta If ($this->ok==1) { $i=0; $x=0; ?> <table border ='0' cellspacing='0' width=100> <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php while($i<count($this->array)) { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option2 onmouseover="this.className='menu_option_over2'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."categoria_cont.php?id_cont=".$this->array[$i]->getClave()."&amp;";?>'" onmouseout="this.className='menu_option2'"> <TD width=10 height=20></TD> <TD class=linksec2 height=20>.:<?php echo $this>array[$i]->getDescripcion();?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <?php $i++; } } else { $mybox = new CuadroHtml('TOP',150,"3",1); $mybox->Agregar(0,0,"No existe Top "); $mybox->MostrarHTML(); } } } Gráfico No.1.14i. Clase PlantillaHtml.class 63 function SeccionDerechaMostrarHtml() { //**************************************BUSQUEDA **************************************************** echo "<form name='buscar' action='".config_live_site."respuesta_bus.php' method='GET' enctype='multipart/formdata'>"; $this->array=array(); $this->ok=0; $i=0; $mytranscategoria= new cls_transcategoria(); // crea un objeto cls_transcategoria $mytranscategoria->consulta_categoria($this->array,$this->ok); // llama a consulta_categoria if($this->ok==1) { $var_cadena="<select name='categoria' id='categoria' class='layout_peq' > "; $var_cadena.="<option value='0'> Todos </option>"; ?> <table border ='0' cellspacing='0' width=100>// crea tabla <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php while ($i<count($this->array)) { $var_cadena.="<option value='".$this->array[$i]->getCodigo()."'> <font color=\"#005E00\" size=\"-6\"> ".$this->array[$i]->getDescripcion()."</font></option>"; $i++; } $var_cadena.="</font></select>"; } ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Categoria </TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php echo $var_cadena;?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" // crea tabla de separacion border=0> <TBODY> <TR class=menu_option Gráfico No.1.14j. Clase PlantillaHtml.class 64 onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.: Titulo </TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php $cad2="<input type='text' id='titulo' name='titulo' size='26' class='layout_peq'>"; echo $cad2;?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20><?php $var_cadena="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type='submit' value ='Buscar' class='layout_peq'>"; echo $var_cadena;?></TD> </TR> </TBODY> </TABLE> <?php echo "</form>"; /* * Muestra las categorias mas solicitadas * Muestra la busqueda de productos */ //******************************************************CATEGORIAS*********************************** $this->ok=0; $this->array=array(); // encera array $mytranscategoria= new cls_transcategoria(); // crea objeto cls_transcategoria( $mytranscategoria->consultar_solicitado($this->array,$this->ok); llama consultar_solicitado if($this->ok===1) { $mybox = new CuadroHtml('CATEGORIAS',150,"3",0); $i=0; ?> <table border ='0' cellspacing='0' width=100>// crea tabla <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php while($i<count($this->array)) Gráfico No.1.14k. Clase PlantillaHtml.class 65 { ?> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option onmouseover="this.className='menu_option_over'" style="CURSOR: pointer; PADDING-TOP: 2px" onclick="document.location='<?php echo config_live_site."categoria_det.php?categoria=".$this>array[$i]->getCodigo()."&amp;";?>'" onmouseout="this.className='menu_option'"> <TD width=10 height=20></TD> <TD class=linksec height=20>.:<?php echo $this->array[$i]->getDescripcion();?></TD> </TR> </TBODY> </TABLE> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> // tabla de linea <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <?php $i++; } } else { $mybox = new CuadroHtml('CATEGORIAS',150,"3",0); $mybox->Agregar(0,0,"No existen categorias"); $mybox->MostrarHTML(); } echo "<br>"; //**************************************CUADRO ULTIMOS PRODUCTOS PUBLICADOS************************** $this->array=array(); $this->ok=0; $mytransproducto= new cls_transproducto_publicado(); // crea objeto transproducto_publicado $mytransproducto->consulta_vector($this->array,$this->ok);// llama consulta_vector if($this->ok==1) { $i=0; $x=0; ?> <table border ='0' cellspacing='0' width=100> <TBODY> <TR> <td > <IMG src="img/subtitulo.jpg" width="145" height="24" border=0> </TD> </TR></TBODY></TABLE> <?php <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR class=menu_option2 onmouseover="this.className='menu_option_over2'" style="CURSOR: pointer; PADDING-TOP: 2px" Gráfico No.1.14l. Clase PlantillaHtml.class 66 </TBODY> </TABLE> <a onclick="document.location='<?php echo config_live_site."categoria_cont.php?id_cont=".$this>array[$i]->getClave()."&amp;";?>'" onmouseout="this.className='menu_option2'"> <TD width=10 height=20></TD> <TD class=linksec2 height=20>.:<?php echo $this->array[$i]->getDescripcion();?></TD> </TR> <TABLE cellSpacing=0 cellPadding=0 width="146" border=0> <TBODY> <TR> <TD bgColor=#ffffff height=1></TD></TR></TBODY></TABLE> <?php $i++; }// fin de while } else { $mybox = new CuadroHtml('ULTIMOS PRODUCTOS PUBLICADOS ',150,"3",1); $mybox->Agregar(0,0,"No existe ultimos productos publicados"); $mybox->MostrarHTML(); } }//fin de function SeccionDerechaMostrarHtm //FUNCIONES COMUNES function PreProcesoSystema() { // inicia las sesiones Seccion_Star(); } function SeccionSuperiorMostrarHtml() { ///SI EL USUARIO HA INICIADO SESION MUESTRA LA INFO Y EL VINCULO DE CERRAR SESION $valor=0; if (isset($_SESSION['usuario'])) { $usuario = $_SESSION['usuario']; $mensaje = "Bienvenido Usuario <b>$usuario</b>,"; $myvinculo = new VinculoUrl('Cerrar Sesion',config_live_site.'logout.php'); $valor=1; } Else { $myvinculo = new VinculoUrl('Iniciar Sesion',config_live_site.'login.php'); $mensaje = "No ha iniciado sesion, "; $valor=0; } echo $mensaje; $myvinculo->Mostrar(); if ($valor==1) { echo " | "; $miVinculoOpciones = new VinculoUrl('Opciones',config_live_site.'opciones.php?user='.$usuario); $miVinculoOpciones->Mostrar(); } }//fin de function SeccionSuperiorMostrarHtml Gráfico No.1.14m. Clase PlantillaHtml.class 67 function MostrarError() { $CodigoError=0; $MensajeError=""; if (isset($_GET['error'])) $CodigoError=$_GET['error']; if ($CodigoError===0) return; ///Aqui se puede poner una include y una funcion que recupere los errores por Codigo, miestras tanto pongo un switch switch ($CodigoError){ case "error_login": $MensajeError="No se ha podido ingresar con este usuario y password, por favor intente de nuevo"; break; case "no": $MensajeError="No se se pudo ganar la Copa"; break; case "error_captcha": $MensajeError="Error de captcha"; break; } $mybox = new CuadroHtml('Error',200,'error'); $mybox->Agregar(0,0,$MensajeError); $mybox->MostrarHTML(); }//fin de function MostrarError function seccioninferiormostrar() { $this->array=array(); $this->ok=0; $mytransdocumento = new cls_transdocumento(); // crea un objeto new cls_transdocumento $mytransdocumento->consultar_politicas($this->ok,$this->array ); // llama la presentacion de documentos de categoria politicas $i=0; $var_cadena=''; while($i<count($this->array)) { $url="<a href='".config_live_site."documento.php?clave=".$this->array[$i]->getClave()."'>".$this->array[$i]->getTitulo()."</a>"; $var_cadena.=$url."&nbsp;| "; $i++; } echo $var_cadena; } function SeccionSuperiorCentroMostrarHtml() {} //FUNCION Para Heredar function SeccionCentroMostrarHtml(){} function PreProceso(){} }//fin de class PlantillaHtml ?> Gráfico No.1.14n. Clase PlantillaHtml.class 68 1.4.7 PlantillaDialogoHtml.class. php Clase que genera la plantilla de las ventanas emergentes, que es utilizada en los mantenimientos en la consola de administración. Ubicación: /lib/ PlantillaDialogoHtml.php <?php class PlantillaDialogoHtml { /* * Plantilla del cuadro de dialogo * sirve para las ventanas de mantenimientos que esisten en * la parte de administracion */ var $Titulo; function PlantillaDialogoHtml($titulopagina) { $this->Titulo= $titulopagina; $this->PreProceso(); } function MostrarHtml() { ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link href="layout.css" rel="stylesheet" type="text/css"> <title>AquiDescarga :: <?php echo $this->Titulo; ?></title><!-- titulo de la pagina --> </head> <body> <table width="380" height="38" border="0">><!-- creacion de tabla--> <tr> <td width="374" align="center" valign="top" class="layout_cuerpocentro2"> <?php $this->SeccionCentroMostrarHtml(); ?></td> <!--llama a la funcion --> </tr> </table> </body> </html> <?php }//fin funcion MostrarHtml //FUNCION Para Heredar function SeccionCentroMostrarHtml(){} function PreProceso(){} } ?> Gráfico No.1.15a. Clase PlantillaDialogoHtml.class. 69 1.4.8 cls_suscriptor. php Clase en la cual contiene las variables del suscriptor con sus respectivos métodos de visualización y asignación. Ubicación: /lib/clases/ clases/suscriptor/cls_suscriptor.php <?php class cls_suscriptor{ /* * clase que contiene las variables * y atributos de dichas variables. * en esta clase sera instanciada * a lo largo del proyecto en diferentes * oprtunidades */ /* * declaracion de variables. */ public static $alias; public static $email; public static $nombre; public static $contrasena; public static $pais; public static $idioma; public static $estado; public static $apellido; public static $entidad; /* * funcion que retorna valor */ public function getAlias() { return $this->alias; } /* * asignacion de valores a las variable de clase */ function setAlias($set_alias="") { $this->alias=$set_alias; } /* * funcion que retorna valor */ public function getEmail() { return $this->email; } /* * asignacion de valores a las variable de clase */ function setEmail($set_email="") { $this->email=$set_email; } Gráfico No.1.16a. Clase cls_suscriptor 70 /* * funcion que retorna valor */ public function getNombre() { return $this->nombre; } /* * asignacion de valores a las variable de clase */ function setNombre($set_nombre="") { $this->nombre=$set_nombre; } /* * funcion que retorna valor */ public function getContrasena() { return $this->contrasena; } /* * asignacion de valores a las variable de clase */ function setContrasena($set_contrasena="") { $this->contrasena=$set_contrasena; } /* * funcion que retorna valor */ public function getPais() { return $this->pais;} public function getEntidad() { return $this->entidad; } /* * asignacion de valores a las variable de clase */ function setEntidad($set_entidad=0) { $this->entidad = $set_entidad; } /* * asignacion de valores a las variable de clase */ function setPais($set_pais=0) { $this->pais=$set_pais; } /* * funcion que retorna valor */ Gráfico No.1.16b. Clase cls_suscriptor 71 public function getIdioma() { return $this->idioma; } /* * asignacion de valores a las variable de clase */ function setIdioma($set_idioma=0) { $this->idioma = $set_idioma; } /* * funcion que retorna valor */ public function getEstado() { return $this->estado; } /* * asignacion de valores a las variable de clase */ function setEstado($set_estado="A") { $this->estado = $set_estado; } /* * funcion que retorna valor */ public function getApellido() { return $this->apellido; } /* * funcion que retorna valor */ function setApellido($set_apellido="") { $this->apellido = $set_apellido; } /* * funcion que retorna valor */ public function getEntidad() { return $this->entidad; } /* * asignacion de valores a las variable de clase */ function setEntidad($set_entidad=0) { $this->entidad = $set_entidad; } }?> Gráfico No.1.16c. Clase cls_suscriptor 72 1.4.9 cls_sqlsuscriptor.php Clase que contiene los métodos de sentencias para realizar el acceso de la base de datos. Ubicación: /lib/clases/ clases/suscriptor/cls_sqlsuscriptor.php <?php class cls_sqlsuscriptor { /* * clase que realiza todas las transacciones * en la base de mysql * es decir aqui se generan las * sentencias en lenguaje sql que afectan * a la base de datos */ var $link; function __construct(DB_mysql $DB_mysql) { // se asigna la conexion de la base $this->link=$DB_mysql; } function insertar(cls_suscriptor $cls_suscriptor_)//ok { /* * funcion que recibe un objeto para luego * el contenidos de dicho objeto sea ingresado * a la data */ $ssql="insert into tbpv_suscriptor(wsu_alias,wsu_email,wsu_nombre,wsu_contrasena,wsu_pais,wsu_idioma,wsu_estado,w su_apellido) values ("; $ssql.= "'".$cls_suscriptor_->getAlias()."'"; $ssql.= ",'".$cls_suscriptor_->getEmail()."'"; $ssql.= ",'".$cls_suscriptor_->getNombre()."'"; $ssql.= ",'".$cls_suscriptor_->getContrasena()."'"; $ssql.= ", ".$cls_suscriptor_->getPais(); $ssql.= ", ".$cls_suscriptor_->getIdioma(); $ssql.= ",'".$cls_suscriptor_->getEstado()."'"; $ssql.= ",'".$cls_suscriptor_->getApellido()."');"; if (!@mysql_query($ssql))// ejecutar la sentencia { die('Could not connect: '.mysql_error()); return 0; } return 1; // retorna 1 si es correcto } Gráfico No.1.17a. Clase cls_sqlsuscriptor 73 function validar_exite( $clave) { /* verifica si el usuario existe en determinado * pais*/ $ssql="select * from tbpv_suscriptor, tbpv_pais where "; $ssql.=" wsu_pais=wpa_codigo "; $ssql.=" and wpa_codigo =".$clave; $rs=mysql_query($ssql);// ejecuta la sentencia if (!$rs) { return 0; } else { if (mysql_num_rows($rs)>0) { return 1;// verdadero } else { return 0; // falso } } } function validar_exite_idioma( $clave)//ok { /* verifica si se esta usando determinado idoma*/ $ssql="select * from tbpv_suscriptor, tbpv_idioma where "; $ssql.=" wsu_idioma=wid_codigo "; $ssql.=" and wid_codigo =".$clave; $rs=mysql_query($ssql); if (!$rs) { return 0; } else {if (mysql_num_rows($rs)>0) { return 1; // verdadero } else { return 0; // falso }} } function modificar(cls_suscriptor $cls_suscriptor_) { /* Funcion que recibe un objeto con dichos valores que contegan este objeto * seran modificado en la base de datos / $ssql="Update tbpv_suscriptor"; $ssql.= " set wsu_email ='".$cls_suscriptor_->getEmail()."'"; $ssql.= " , wsu_nombre ='".$cls_suscriptor_->getNombre()."'"; $ssql.= " , wsu_contrasena ='".$cls_suscriptor_->getContrasena()."'"; $ssql.= " , wsu_pais =".$cls_suscriptor_->getPais(); $ssql.= " , wsu_idioma =".$cls_suscriptor_->getIdioma(); $ssql.= " , wsu_apellido ='".$cls_suscriptor_->getApellido()."'"; $ssql.= " , wsu_estado ='".$cls_suscriptor_->getEstado()."'"; $ssql.= " where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; if (!@mysql_query($ssql))// ejecuta la sentencia { die('Could not connect: '.mysql_error()); return 0;// falso } return 1; // verdadero } Gráfico No.1.17b. Clase cls_sqlsuscriptor 74 function eliminar(cls_suscriptor $cls_suscriptor_) { /* * funcion que elimina determinado registro */ $ssql ="Delete from tbpv_suscriptor"; $ssql.=" where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } return 1; } function consulta_u(cls_suscriptor &$cls_suscriptor_, &$ok) { /* * funcion que recibe un objeto los datos nesesarios * para luego completar sus datos mediante la consulta de determinado * registro. */ $ssql="Select * from tbpv_suscriptor"; $ssql.=" where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; $rs=mysql_query($ssql);// ejecutar sentencia if (!$rs) { die('Could not connect: '.mysql_error());// error return 0; } else { if (mysql_num_rows($rs)<>0) { while($row=mysql_fetch_array($rs,MYSQL_ASSOC)) { // asignacion de atributos $cls_suscriptor_->setEmail($row["wsu_email"]); $cls_suscriptor_->setNombre($row["wsu_nombre"]); $cls_suscriptor_>setContrasena($row["wsu_contrasena"]); $cls_suscriptor_->setPais($row['wsu_pais']); $cls_suscriptor_->setIdioma($row['wsu_idioma']); $cls_suscriptor_->setEstado($row['wsu_estado']); $cls_suscriptor_->setApellido($row['wsu_apellido']); } mysql_free_result($rs); $ok=1;// verdadero } else { $ok=0; // falso } } } function consulta_u_activos(cls_suscriptor &$cls_suscriptor_, &$ok) { /* * consulta de registros activos */ $ssql="Select * from tbpv_suscriptor"; $ssql.=" where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; $ssql.=" and wsu_estado='A'"; $rs=mysql_query($ssql);// ejecutar sentencias if (!$rs) { die('Could not connect: '.mysql_error()); return 0; } Gráfico No.1.17c. Clase cls_sqlsuscriptor 75 else { if (mysql_num_rows($rs)<>0) { while($row=mysql_fetch_array($rs,MYSQL_ASSOC)) { // asignacion de datos recupardos de la data $cls_suscriptor_->setEmail($row["wsu_email"]); $cls_suscriptor_->setNombre($row["wsu_nombre"]); $cls_suscriptor_>setContrasena($row["wsu_contrasena"]); $cls_suscriptor_->setPais($row['wsu_pais']); $cls_suscriptor_->setIdioma($row['wsu_idioma']); $cls_suscriptor_->setEstado($row['wsu_estado']); $cls_suscriptor_->setApellido($row['wsu_apellido']); } mysql_free_result($rs); $ok=1; } else { $ok=0; } } } function existe_registro(cls_suscriptor $cls_suscriptor_) { /* *funcion que verifica la existencia del dato en esta tabla */ $valor=0; $ssql ="SELECT count(wsu_alias) as existe FROM tbpv_suscriptor "; $ssql.=" where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; $rs=mysql_query($ssql);// ejecucion if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs)) { $valor=$row['existe'];// asigna resultado } mysql_free_result($rs); } } return $valor; } function existe_usuario_clave(cls_suscriptor $cls_suscriptor_) { /* * sentencia que verifica la existencia de alias y su respectiva * contraseña. */ $valor=0; $ssql = "SELECT count(wsu_alias) as existe FROM tbpv_suscriptor "; $ssql.= " where wsu_alias = '".$cls_suscriptor_->getAlias()."'"; $ssql.= " and wsu_contrasena='".md5($cls_suscriptor_->getContrasena())."'"; Gráfico No.1.17d. Clase cls_sqlsuscriptor 76 $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs)) { $valor=$row['existe'];// asignacion de resultado } mysql_free_result($rs); } } return $valor; } function actualizar_entidad(cls_suscriptor $cls_suscriptor_,&$ok)//ok { /* * funcion que verifica si a dicho suscriptor * se le ha cancelado su suscripcion. */ $ssql="Select * from tbpv_tarifa_suscriptor"; $ssql.=" where wtu_alias = '".$cls_suscriptor_->getAlias()."'"; $ssql.=" and wtu_fecha_fin >= Curdate()"; $rs=mysql_query($ssql); if(mysql_num_rows($rs)>0) { /* * actualizacion del suscriptor */ $ssql="Update tbpv_suscriptor"; $ssql.=" set wsu_entidad=".$cls_suscriptor_->getEntidad(); $ssql.=" where wsu_alias='".$cls_suscriptor_->getAlias()."'"; if (!@mysql_query($ssql)) { die('Could not connect:'.mysql_error()); } $ok=0; } else{ $ok=1;} } }?> Gráfico No.1.17e. Clase cls_sqlsuscriptor 77 1.4.10 cls_transsuscriptor Clase que contiene los métodos que llaman a procedimientos o funciones de Ubicación: /lib/clases/ clases/suscriptor/cls_transsuscriptor.php <?php class cls_transsuscriptor { /* * clase que contiene los metodos que llaman los metodos * de la clase sqlsuscriptor. */ function __construct() { } function insertar_p(cls_suscriptor $cls_suscriptor_) { $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor /* * llama al metodo para insertar */ $res=$mysqlsuscriptor->insertar($cls_suscriptor_); if ($res=1) { $link->__sleep();// cierra conexion return 1; // verdadero } else { $link->__sleep();// cierra conexion return 0;// falso } } function eliminar_p(cls_suscriptor $cls_suscriptor_) { $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link); // crea un objeto tipo cls_sqlsuscriptor /* * llama al metodo para eliminar registro */ $res=$mysqlsuscriptor->eliminar($cls_suscriptor_); if ($res=1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } Gráfico No.1.18a. Clase cls_transsuscriptor 78 function consulta_u(cls_suscriptor &$cls_suscriptor_, &$ok) { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $mysqlsuscriptor->consulta_u($cls_suscriptor_,$ok);// llama a metodo $link->__sleep();// cierra conexion } function consulta_u_activos(cls_suscriptor &$cls_suscriptor_, &$ok) { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link); // crea un objeto tipo cls_sqlsuscriptor $mysqlsuscriptor->consulta_u_activos($cls_suscriptor_,$ok);// llama a metodo $link->__sleep();// cierra conexion } function consulta_vector(&$array,&$ok) ///ok { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); $mysqlsuscriptor= new cls_sqlsuscriptor($link); $mysqlsuscriptor->consulta_vector($array,$ok);// llama a metodo $link->__sleep();// cierra conexion } function insertar(&$array) { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $res=$mysqlsuscriptor->insertar($cls_suscriptor_);// llama a metodo if ($res=1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } Gráfico No.1.18b Clase cls_transsuscriptor 79 function existe(cls_suscriptor $cls_suscriptor_) { /* * llama a metodos de cls_sqlsuscriptor */ $res=0;// encerar $link=new DB_mysql();// crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $res=$mysqlsuscriptor->existe_registro($cls_suscriptor_);// llama a metodo $link->__sleep();// cierra conexion return $res;// retorna valor } function validar_exite($clave) { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); $mysqlsuscriptor= new cls_sqlsuscriptor($link); $res=$mysqlsuscriptor->validar_exite($clave); if ($res==1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } function validar_exite_idioma($clave)//ok { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $res=$mysqlsuscriptor->validar_exite_idioma($clave);// llama a metodo if ($res==1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } Gráfico No.1.18c. Clase cls_transsuscriptor 80 function existe_usuario_clave(cls_suscriptor $cls_suscriptor_) { /* * llama a metodos de cls_sqlsuscriptor */ $res=0; $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $res=$mysqlsuscriptor->existe_usuario_clave($cls_suscriptor_);// llama a metodo $link->__sleep();// cierra conexion return $res;// retorna } function modificar_clave(cls_suscriptor $cls_suscriptor_) { /* * llama a metodos de cls_sqlsuscriptor */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlsuscriptor= new cls_sqlsuscriptor($link);// crea un objeto tipo cls_sqlsuscriptor $res=$mysqlsuscriptor->modificar_clave($cls_suscriptor_);// llama a metodo if ($res==1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } Gráfico No.1.18d. Clase cls_transsuscriptor 81 1.4.11 cls_producto_publicado.php Clase en la cual contiene las variables de producto_publicado con sus respectivos métodos de visualización y asignación. Ubicación: /lib/clases/ clases/producto_publicado/cls_producto_publicado.php <?php class cls_producto_publicado { /* * variables y atributos de clase * sufijo get= retorno de dichos valores * sufigo set= reseccion de valores para la variable * de clase */ public static $clave; public static $codigo; public static $descripcion; public static $precio; public static $categoria; public static $fecha_publicacion; public static $direccion; public static $direccion_resumen; public static $numero_descarga; public static $precio_publico; public static $estado; public static $alias; public static $tipo_motivo; public static $resumen; public static $archivo; public static $archivo_resumen; public static $tamanio; public static $tamanio1; public static $tipo_archivo; public static $tipo_resumen; public static $nombre_archivo; public static $nombre_resumen; public static $porcentaje; public static $oferta; public static $num_descarga; public function getClave() { return $this->clave; } function setClave($set_clave=0) { $this->clave=$set_clave; } public function getCodigo() { return $this->codigo; } Gráfico No.1.19a. Clase cls_Producto_publicado 82 function setCodigo($set_codigo) { $this->codigo = $set_codigo; } public function getDescripcion() { return $this->descripcion; } function setDescripcion($set_descripcion="") { $this->descripcion= $set_descripcion; } public function getPrecio() { return $this->precio; } function setPrecio($set_precio=0) { $this->precio = $set_precio; } public function getCategoria() { return $this->categoria; } function setCategoria($set_categoria=0) { $this->categoria = $set_categoria; } public function getFecha_publicacion() { return $this->fecha_publicacion; } function setFecha_publicacion($set_fecha_publicacion=0) { $this->fecha_publicacion=$set_fecha_publicacion; } public function getDireccion() { return $this->direccion; } function setDireccion($set_direccion="") { $this->direccion=$set_direccion; } public function getDireccion_resumen() { return $this->direccion_resumen; } function setDireccion_resumen($set_direccion_resumen="") { $this->direccion_resumen=$set_direccion_resumen; } public function getNumero_descarga() { return $this->numero_descarga; } Gráfico No.1.9b. Clase cls_Producto_publicado.php 83 function setNumero_descarga($set_numero_descarga=0) { $this->numero_descarga=$set_numero_descarga; } public function getPrecio_publico() { return $this->precio_publico; } function setPrecio_publico($set_precio_publico=0) { $this->precio_publico=$set_precio_publico; } public function getEstado() { return $this->estado; } function setEstado($set_estado="A") { $this->estado=$set_estado; } public function getAlias() { return $this->alias; } function getTipo_motivo() { return $this->tipo_motivo; } function setTipo_motivo($set_tipo_motivo="") { $this->tipo_motivo=$set_tipo_motivo; } //Por motivo de espacio no se coloco el resto de codigo. Gráfico No.1.19c. Clase cls_Producto_publicado. 84 1.4.12 cls_sqlproducto_publicado Ubicación: /lib/clases/ clases/producto_publicado/cls_sqlproducto_publicado.php <?php class cls_sqlproducto_publicado { /* * clase que contiene las sentecias * de acceso a la data. */ var $link; // constructor function __construct(DB_mysql $DB_mysql) { $this->link=$DB_mysql; } //funcion que modifica los datos del contenido por el administrador function admin_modificar(cls_producto_publicado $myproducto) { $ssql=" Update tbpv_producto_publicado"; $ssql.= " set wpp_estado=".$myproducto->getEstado(); $ssql.= ", wpp_resumen='".$myproducto->getResumen()."'"; $ssql.= ", wpp_oferta='".$myproducto->getOferta()."'"; $ssql.= ", wpp_porcentaje=".$myproducto->getPorcentaje(); $ssql.= " where wpp_clave =".$myproducto->getClave(); if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } return 1; } // modifica los datos por el suscriptor function admin_modificar_usuario(cls_producto_publicado $myproducto)//ok { $ssql=" Update tbpv_producto_publicado"; $ssql.= " set wpp_resumen='".$myproducto->getResumen()."'"; $ssql.= ", wpp_precio=".$myproducto->getPrecio(); $ssql.= ", wpp_precio_publico=".$myproducto->getPrecio_publico(); $ssql.= " where wpp_clave =".$myproducto->getClave(); if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } return 1; } Gráfico No.1.20a. Clase cls_sqlProducto_publicado 85 /* *valida los productos para el suscriptor */ function validar_producto_sql($usuario,$archivo) { $ssql =" select * from tbpv_producto_publicado, tbpv_tarifa_suscriptor"; $ssql.=" where wpp_alias = wtu_alias and wpp_alias='".$usuario."'"; $ssql.=" and wtu_fecha_inicial <= CURDATE()"; $ssql.=" and wtu_fecha_fin > CURDATE()"; $ssql.=" and wpp_nombre_archivo='".$archivo."'"; $rs=mysql_query($ssql); if (!$rs) { return 0; } else { if (mysql_num_rows($rs)>0) { return 1; } else { return 0; } } } /* valida si existe una clave del producto*/ function validar_exite($clave) { $ssql=" select * from tbpv_producto_publicado, tbpv_motivo_rechazo $ssql.=" wtr_codigo = wpp_tipo_motivo"; $ssql.=" and wtr_codigo =".$clave; $rs=mysql_query($ssql); if (!$rs) { return 0; } else { if (mysql_num_rows($rs)>0) { return 1;//verdadero } else { return 0;//false } } } function insertar( cls_producto_publicado &$myproducto) { /* * funcion que recibe un objeto para luego * el contenidos de dicho objeto sea ingresado * a la data */ ////////////GUARDAR ARCHIVO EN PRODUCTOS PUBLICADOS /////////////////////////// // calcula el codigo que le corresponde $var_codigo; $var_secuencia; $ok=0; Gráfico No.1.20b. Clase cls_sqlProducto_publicado where "; 86 $ssql=" Select max(wpp_clave) + 1 as secuencia "; $ssql.=" from tbpv_producto_publicado "; $rs=mysql_query($ssql); if (!$rs) { $var_secuencia=1; die('Mensaje'. mysql_error()); } else { if(mysql_num_rows($rs)>0) { while($row=mysql_fetch_array($rs,MYSQL_ASSOC)) { if($row["secuencia"] == NULL) { $var_secuencia=1; } else {$var_secuencia=$row["secuencia"];}// asignacion de secuencia } } } $myproducto->setClave($var_secuencia); // realiza la insersion $ssql="insert into tbpv_producto_publicado "; $ssql.= " ( wpp_clave, wpp_codigo , wpp_descripcion , wpp_precio , wpp_categoria "; $ssql.= " , wpp_fecha_publicacion, wpp_direccion , wpp_direccion_resumen , wpp_numero_descarga , wpp_precio_publico"; $ssql.= " , wpp_estado , wpp_alias , wpp_tipo_motivo , wpp_resumen"; $ssql.= " , wpp_tm_archivo , wpp_tm_resumen "; $ssql.= " , wpp_tipo_archivo , wpp_tipo_resumen , wpp_nombre_archivo , wpp_nombre_resumen "; $ssql.= ") values ("; $ssql.= $var_secuencia; $var_codigo=str_repeat('0',5-strlen($myproducto->getCategoria())); $var_codigo.=$myproducto->getCategoria().str_repeat('0',6strlen($var_secuencia)); $var_codigo.=$var_secuencia; $ssql.=",'".$var_codigo; $ssql.= "' ,'".$myproducto->getDescripcion()."'"; $ssql.= " , ".$myproducto->getPrecio(); ; $ssql.= " , ".$myproducto->getCategoria(); $ssql.= " ,".$myproducto->getFecha_publicacion(); $ssql.= " ,'".$myproducto->getDireccion()."'"; $ssql.= " ,'".$myproducto->getDireccion_resumen()."'"; $ssql.= " , ".$myproducto->getNumero_descarga(); $ssql.= " , ".$myproducto->getPrecio_publico(); $ssql.= " ,".$myproducto->getEstado().""; $ssql.= " ,'".$myproducto->getAlias()."'"; $ssql.= " , ".$myproducto->getTipo_motivo(); $ssql.= " , '".$myproducto->getResumen()."'"; $ssql.= " , ".$myproducto->getTamanio(); $ssql.= " , ".$myproducto->getTamanio1(); $ssql.= " , '".$myproducto->getTipo_archivo()."'"; $ssql.= " , '".$myproducto->getTipo_resumen()."'"; $ssql.= " , '".$myproducto->getNombre_archivo()."'"; $ssql.= " , '".$myproducto->getNombre_resumen()."'"; $ssql.= " ); "; if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } Gráfico No.1.20c. Clase cls_sqlProducto_publicado 87 else { //si la actualizacion en la base fue correcta se cambia de nombre al archivo por el // conformado del codigo rename($myproducto->getDireccion().$myproducto>getNombre_archivo(),$myproducto->getDireccion().$var_codigo.".pdf"); if($myproducto->getTamanio1()<>0) { rename($myproducto->getDireccion_resumen().$myproducto>getNombre_resumen(),$myproducto->getDireccion_resumen().$var_codigo.".pdf"); } return 1; } } function modificar(cls_producto_publicado $myproducto) { /* * Funcion que recibe un objeto con dichos valores que contegan este objeto * seran modificado en la base de datos */ $ssql="Update tbpv_producto_publicado"; $ssql= $ssql."set wpp_codigo='".$myproducto->getCodigo()."'"; $ssql= $ssql." , wpp_descripcion='".$myproducto->getDescripcion()."'"; $ssql= $ssql." , wpp_precio=".$myproducto->getPrecio(); $ssql= $ssql." , wpp_categoria=".$myproducto->getCategoria(); $ssql= $ssql." , wpp_fecha_publicacion='".$myproducto>getFecha_publicacion()."'"; $ssql= $ssql." , wpp_direccion='".$myproducto->getDireccion()."'"; $ssql= $ssql." , wpp_numero_descarga=".$myproducto->getNumero_descarga(); $ssql= $ssql." , wpp_precio_publico=".$myproducto->getPrecio_publico(); $ssql= $ssql." , wpp_estado='".$myproducto->getEstado()."'"; $ssql= $ssql." , wpp_alias='".$myproducto->getAlias()."'"; $ssql= $ssql." where wpp_clave ='".$myproducto->getClave()."'"; if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } return 1; } function eliminar(cls_producto_publicado $myproducto) { /* * llama al metodo para eliminar registro */ $ssql="Delete from tbpv_producto_publicado"; $ssql= $ssql." where wpp_clave ='".$myproducto->getClave()."'"; if (!@mysql_query($ssql)) { die('Could not connect: '.mysql_error()); return 0; } return 1; } Gráfico No.1.20d. Clase cls_sqlProducto_publicado 88 function validar_id($id)//ok { /* * valida la existencia del id del producto */ $ssql="select * from tbpv_producto_publicado "; $ssql= $ssql." where wpp_clave = ".$id.";"; $rs=mysql_query($ssql); if (!$rs) { return 0; } else { if (mysql_num_rows($rs)>0) { return 1;} else {return 0;} } } function consulta_producto(cls_producto_publicado &$producto, &$ok) { /* * Metodo que recibe una variable tipo clase y una bandera * Consulta a la tabla tbpv_producto_publicado el precio de un producto de acuerdo a la clave * recibida en la variable tipo clase */ $ssql= " select * from tbpv_producto_publicado "; $ssql.= " where wpp_clave = ".$producto->getClave().";"; $rs = mysql_query($ssql); if(!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { $row = mysql_fetch_array($rs, MYSQL_ASSOC); $producto->setCodigo($row["wpp_codigo"]); $producto->setDescripcion($row["wpp_descripcion"]); $producto->setPrecio($row["wpp_precio"]); $producto->setCategoria($row["wpp_categoria"]); $producto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $producto->setDireccion($row["wpp_direccion"]); $producto->setNumero_descarga($row["wpp_numero_descarga"]); $producto->setPrecio_publico($row["wpp_precio_publico"]); $producto->setEstado($row["wpp_estado"]); $producto->setAlias($row["wpp_alias"]); $producto->setTipo_motivo($row["wpp_tipo_motivo"]); $producto->setResumen($row["wpp_resumen"]); $producto->setTamanio1($row["wpp_tm_resumen"]); $producto->setTamanio($row["wpp_tm_archivo"]); $producto->setPorcentaje($row["wpp_porcentaje"]); $producto->setOferta($row["wpp_oferta"]); $producto->setNombre_archivo($row["wpp_nombre_archivo"]); $producto->setNombre_resumen($row["wpp_nombre_resumen"]); $ok=1; } else $ok=0; } }//fin de function consulta_producto Gráfico No.1.20e. Clase cls_sqlProducto_publicado 89 function consulta_vector(&$array,&$ok)//ok { /* * CONSULTA DE LO ULTIMO PUBLICADOS EN EL PORTAL * Metodo que recibe una variable tipo array y una bandera * Realiza: * Consulta a la tabla tbpv_par_vizualizacion el tamaño maximo de registro para presen* ta en el cuadro de lo ultimo publicado. * Consulta a la tabla tbpv_producto_publicado los ultimos producto publicados. */ $top=0; $ssql="Select cpv_top from tbpv_par_vizualizacion"; $ssql= $ssql." where cpv_clave=3 "; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $top=$row['cpv_top']; } } } $i=0; $ssql= " select * from tbpv_producto_publicado"; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado= 2)"; $ssql.= " order by wpp_fecha_publicacion desc LIMIT 0,$top"; $rs = mysql_query($ssql); if(!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto->setNumero_descarga($row["wpp_numero_descarga"]); Gráfico No.1.20f. Clase cls_sqlProducto_publicado 90 $myproducto->setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $array[$i]=($myproducto); $i++; }//fin del While mysql_free_result($rs); $ok=1; }// fin del if else $ok=0; }//fin del else }//fin de function consulta_vector function Cons_Prod_Cate(&$categorias, &$array, &$ok)//ok { /* * recupera los producto que corresponde a una categoria * especifica */ $i=0; //echo $categorias."<br>"; $ssql="select * from tbpv_producto_publicado "; $ssql= $ssql." where wpp_categoria = ".$categorias.";"; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if (mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto->setNumero_descarga($row["wpp_numero_descarga"]); $myproducto->setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $myproducto->setTamanio1($row["wpp_tm_resumen"]); $array[$i]=($myproducto);// asignacion a array de valores. $i++; } mysql_free_result($rs); $ok=1; } else {$ok=0;} } } Gráfico No.1.20g. Clase cls_sqlProducto_publicado 91 function total_registro(&$categorias,&$titulo,&$estado) { /* * Metodo que recibe dos variables * Consulta a la tabla tbpv_producto_publicado los productos de acuerdo a la categoria * seleccionada. * Consulta a la tabla tbpv_producto_publicado y muestra el total de registros */ $ssql = "select * from tbpv_producto_publicado "; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado=".$estado.")"; //echo $ssql; if ($categorias<>0) { $ssql.= " and wpp_categoria = ".$categorias; $ssql.= " and wpp_descripcion like '%$titulo%'"; } else { $ssql.=" and wpp_descripcion like '%$titulo%'"; } //$ssql.=" and wpp_estado=2"; $oRs= mysql_query($ssql); if(!$oRs) { //die('Could not connect: '.mysql_error()); return 0; } else { $total_records = mysql_num_rows($oRs); return $total_records; } } function Cons_Prod_Cate_Titulo(&$categorias,&$titulo,&$array,&$ok,&$pages,&$cantidad,&$estado)//ok { /* * Metodo que recibe dos variables * Consulta a la tabla tbpv_producto_publicado los productos de acuerdo a la categoria * seleccionada. * Consulta a la tabla tbpv_producto_publicado todos los productos * que tiene estado activo */ $inicial = $pages * $cantidad; $i=0; $ssql="select * from tbpv_producto_publicado "; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado=".$estado.")"; if ($categorias<>0) { $ssql.= " and wpp_categoria = ".$categorias ; $ssql.= " and (wpp_descripcion like '%".$titulo."%' "; $ssql.= " or wpp_resumen like '%".$titulo."%') "; } Gráfico No.1.20h. Clase cls_sqlProducto_publicado 92 else { $ssql.= " and (wpp_descripcion like '%".$titulo."%' "; $ssql.= " or wpp_resumen like '%".$titulo."%') "; } $ssql.= " limit "; $ssql.=$inicial.",".$cantidad; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error());} else { if (mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto->setNumero_descarga($row["wpp_numero_descarga"]); $myproducto->setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setOferta($row["wpp_oferta"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $myproducto->setTamanio1($row["wpp_tm_resumen"]); $array[$i]=($myproducto); $i++; } mysql_free_result($rs); $ok=1; } else {$ok=0;} } } function total_registro_usuario(&$categorias,&$titulo,&$usuario) { /* * Medoto que muestra los contenidos de un usuario especifico * Metodo que recibe dos variables * Consulta a la tabla tbpv_producto_publicado los productos de acuerdo a la categoria * seleccionada. * Consulta a la tabla tbpv_producto_publicado y muestra el total de registros */ $ssql = "select * from tbpv_producto_publicado "; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado= 2)"; $ssql.= " AND (tbpv_prodcuto_publicado.wpp_alias='".$usuario."')"; if ($categorias<>0) { $ssql= $ssql." and wpp_categoria = ".$categorias; $ssql.=" and wpp_descripcion like '%$titulo%'"; } Gráfico No.1.20i. Clase cls_sqlProducto_publicado 93 else { $ssql.=" and wpp_descripcion like '%$titulo%'"; } //$ssql.=" and wpp_estado=2"; $oRs= mysql_query($ssql); if(!$oRs) { //die('Could not connect: '.mysql_error()); return 0; } else { $total_records = mysql_num_rows($oRs); return $total_records; } } function Cons_Prod_Cate_Titulo_Usuario(&$categorias,&$titulo,&$array,&$ok,&$pages,&$cantidad,&$usuario) { /* * Metodo que recibe dos variables * Consulta a la tabla tbpv_producto_publicado los productos de acuerdo a la categoria * seleccionada. * Consulta a la tabla tbpv_producto_publicado todos los productos * que tiene estado activo */ $inicial = $pages * $cantidad; $i=0; $ssql="select * from tbpv_producto_publicado "; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND wtu_estado='A'"; $ssql.= " AND wpp_estado=2"; $ssql.= " AND wpp_alias='".$usuario."'"; if ($categorias<>0) { $ssql.= " and wpp_categoria = ".$categorias; $ssql.= " and (wpp_descripcion like '%".$titulo."%'"; $ssql.= " or wpp_resumen like '%".$titulo."%')"; } else { $ssql.= " and (wpp_descripcion like '%".$titulo."%' "; $ssql.= " or wpp_resumen like '%".$titulo."%') "; } $ssql.= " limit "; $ssql.=$inicial.",".$cantidad; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if (mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); Gráfico No.1.20j. Clase cls_sqlProducto_publicado 94 $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto->setNumero_descarga($row["wpp_numero_descarga"]); $myproducto->setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $myproducto->setTamanio1($row["wpp_tm_resumen"]); $array[$i]=($myproducto); $i++; } mysql_free_result($rs); $ok=1; } else {$ok=0;} } } function consulta_vectorTOP5(&$array,&$ok)//OK { /* * Metodo que recibe una variable tipo array y una bandera * Realiza: * Consulta a la tabla tbpv_par_vizualizacion el tamaño maximo de registro para presen* ta en el cuadro del Top. * Consulta a las tablas tbpv_producto_publicado y tbpv_tarifa_suscriptor los producto * que tiene una suscripcion activa y ademas los que tienen mayor numero de descargas. */ $top=0; $ssql="Select cpv_top from tbpv_par_vizualizacion"; $ssql= $ssql." where cpv_clave=1 "; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $top=$row['cpv_top']; } } } $i=0; $ssql= " SELECT tbpv_producto_publicado.*"; $ssql.= " FROM tbpv_producto_publicado"; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado= 2)"; $ssql.= " ORDER BY tbpv_producto_publicado.wpp_numero_descarga"; $ssql.= " desc LIMIT 0,$top"; Gráfico No.1.20k. Clase cls_sqlProducto_publicado 95 $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto>setNumero_descarga($row["wpp_numero_descarga"]); $myproducto>setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setOferta($row["wpp_oferta"]); $myproducto->setTamanio1($row["wpp_tm_resumen"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $array[$i]=($myproducto); $i++; } mysql_free_result($rs); $ok=1; } else { $ok=0; } }//fin del else }//fin de function consulta_vectorTOP5 function consulta_oferta(&$array,&$ok)//OK { /* * Metodo que recibe una variable tipo array y una bandera * Realiza: * Consulta las ofertas que se han realizado */ $top=0; $ssql="Select cpv_top from tbpv_par_vizualizacion"; $ssql= $ssql." where cpv_clave=1 "; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $top=$row['cpv_top']; } } } Gráfico No.1.20l. Clase cls_sqlProducto_publicado 96 $i=0; $ssql= " SELECT tbpv_producto_publicado.*"; $ssql.= " FROM tbpv_producto_publicado"; $ssql.= " INNER JOIN tbpv_tarifa_suscriptor tbpv_tarifa_suscriptor"; $ssql.= " ON tbpv_producto_publicado.wpp_alias = tbpv_tarifa_suscriptor.wtu_alias"; $ssql.= " WHERE(tbpv_tarifa_suscriptor.wtu_fecha_fin >=curdate())"; $ssql.= " AND (tbpv_tarifa_suscriptor.wtu_estado ='A')"; $ssql.= " AND (tbpv_producto_publicado.wpp_estado= 2)"; $ssql.= " AND (tbpv_producto_publicado.wpp_oferta='A')"; $ssql.= " ORDER BY tbpv_producto_publicado.wpp_numero_descarga"; $ssql.= " desc LIMIT 0,$top"; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto>setNumero_descarga($row["wpp_numero_descarga"]); $myproducto>setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTamanio1($row["wpp_tm_resumen"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $array[$i]=($myproducto); $i++; } mysql_free_result($rs); $ok=1; } else { $ok=0; } }//fin del else } function consulta_vector_ult_user( $usuario) { $i=0; $ssql="Select * from tbpv_producto_publicado"; $ssql= $ssql." where wpp_alias='".$usuario."'"; $ssql= $ssql." and wpp_fecha_publicacion < CURDATE()"; $ssql= $ssql." order by wpp_fecha_publicacion asc limit 0,2"; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { Gráfico No. Clase cls_sqlProducto_publicado.php Gráfico No.1.20m. Clase cls_sqlProducto_publicado 97 while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto->setNumero_descarga($row["wpp_numero_descarga"]); $myproducto->setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $array[$i]=($myproducto); $i++;} mysql_free_result($rs); return $array;} } //////////////ULTIMOS PUBLICADOS DEL SUSCRIPTOR///////////////////////// function consulta_vector_suscriptor(&$usuario,&$array,&$ok) { /* Metodo que recibe Realiza: Consulta a la tabla tbpv_producto_publicado los ultimos cinco productos publicados de acuerdo al alias recibido*/ $i=0; $ssql= " select * from tbpv_producto_publicado, tbpv_suscriptor"; $ssql.= " where wpp_alias = wsu_alias and wsu_alias='".$usuario."'"; $ssql.= " order by wpp_fecha_publicacion desc LIMIT 0,5 "; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error());} else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $myproducto = new cls_producto_publicado(); $myproducto->setClave($row["wpp_clave"]); $myproducto->setCodigo($row["wpp_codigo"]); $myproducto->setDescripcion($row["wpp_descripcion"]); $myproducto->setPrecio($row["wpp_precio"]); $myproducto->setCategoria($row["wpp_categoria"]); $myproducto>setFecha_publicacion($row["wpp_fecha_publicacion"]); $myproducto->setDireccion($row["wpp_direccion"]); $myproducto>setNumero_descarga($row["wpp_numero_descarga"]); $myproducto>setPrecio_publico($row["wpp_precio_publico"]); $myproducto->setEstado($row["wpp_estado"]); $myproducto->setAlias($row["wpp_alias"]); $myproducto->setTipo_motivo($row["wpp_tipo_motivo"]); $myproducto->setResumen($row["wpp_resumen"]); $array[$i]=($myproducto); $i++; } mysql_free_result($rs); $ok=1;} else {$ok=0; } } }//fin de function consulta_vector_suscriptor } ?> Gráfico No.1.20n. Clase cls_sqlProducto_publicado 98 1.4.13 cls_transproducto_publicado Ubicación: /lib/clases/ clases/producto_publicado/cls_transproducto_publicado.php <?php class cls_transproducto_publicado { /* * metodos de clases que llaman a procedimientos * de cls_sqlproducto_publicado */ function __construct() {} function admin_modificar(cls_producto_publicado $cls_producto_publicado_) { /* * llama a procedimiento de sqlproducto_publicado. */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $sqlproducto_publicado = new cls_sqlproducto_publicado($link);// crea un objeto tipo cls_producto_publicado $res=$sqlproducto_publicado->admin_modificar($cls_producto_publicado_); if ($res=1) { $link->__sleep(); return 1; } else { $link->__sleep(); return 0; } } function admin_modificar_usuario(cls_producto_publicado $cls_producto_publicado_) { /* * permite realizar la actualizacion de datos llamando a * metodo admin_modificar_usuario solo a suscriptores */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $sqlproducto_publicado = new cls_sqlproducto_publicado($link);// crea un objeto tipo cls_producto_publicado $res=$sqlproducto_publicado->admin_modificar_usuario($cls_producto_publicado_);// llama a metodo if ($res=1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } function validar_producto($usuario, $archivo) { /* * valida a contenido de determido usuario */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $sqlproducto_publicado= new cls_sqlproducto_publicado($link);// crea un objeto tipo cls_producto_publicado $res=$sqlproducto_publicado->validar_producto_sql($usuario, $archivo);// llama a metodo if ($res==1) { $link->__sleep();// cierra conexion return 1; } Gráfico No.1.21a. Clase cls_transProducto_publicado 99 else { $link->__sleep();// cierra conexion return 0; } } function validar_exite($clave) { /* valida si exite*/ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $sqlproducto_publicado= new cls_sqlproducto_publicado($link);// crea un objeto tipo cls_producto_publicado $res=$sqlproducto_publicado->validar_exite($clave);// llama a metodo if ($res==1) { $link->__sleep();// cierra conexion return 1; } else { $link->__sleep();// cierra conexion return 0; } } function validar_exite_($clave) { $link=new DB_mysql(); $sqlproducto_publicado= new cls_sqlproducto_publicado($link); $res=$sqlproducto_publicado->validar_exite_($clave); if ($res==1) { $link->__sleep(); return 1; } else { $link->__sleep(); return 0; } } function insertar_t(cls_producto_publicado &$cls_producto_publicado_) { /* llama al metodo insertar de cls_sqlproducto_publicado*/ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $res=$sqlproducto_publicado->insertar($cls_producto_publicado_); if ($res=1) { $link->__sleep(); return 1; } else { $link->__sleep(); return 0; } } Gráfico No.1.21b. Clase cls_transProducto_publicado 100 function modificar_t(cls_producto_publicado $cls_producto_publicado_) { /* llama al metodo modificar de cls_sqlproducto_publicado*/ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $res=$sqlproducto_publicado->modificar($cls_producto_publicado_); if ($res=1) { $link->__sleep(); return 1; } else { $link->__sleep(); return 0; } } function validar_id($id) { /* * valida el id del producto */ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $res=$sqlproducto_publicado->validar_id($id); if ($res=1) { $link->__sleep(); return 1; } else { $link->__sleep(); return 0; } } function consulta_producto(cls_producto_publicado &$producto, &$ok) { /* * funcion que recibe una variable tipo clase y una bandera * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $sqlproducto_publicado->consulta_producto($producto,$ok); $link->__sleep(); } function consulta_u_t(cls_producto_publicado $cls_producto_publicado_) { $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $cls_producto_publicado= new cls_producto_publicado(); $cls_producto_publicado=$sqlproducto_publicado->consulta_u($cls_producto_publicado_); if ($cls_producto_publicado->getClave()!=0) { $link->__sleep(); return $cls_producto_publicado; } Gráfico No.1.21c. Clase cls_transProducto_publicado 101 else { $link->__sleep(); return $cls_producto_publicado; } } function consulta_vector(&$array,&$ok) { /* * funcion que recibe una variable tipo arreglo y una bandera * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $sqlproducto_publicado->consulta_vector($array,$ok); $link->__sleep(); } function Cons_Prod_Cate(&$categorias,&$array,&$ok)//ok { $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $sqlproducto_publicado->Cons_Prod_Cate($categorias,$array,$ok); $link->__sleep(); } function total_registro(&$categorias,&$titulo,&$estado) { /* * funcion que recibe dos variable * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $cont =$sqlproducto_publicado->total_registro($categorias,$titulo,$estado); $link->__sleep(); return $cont; } function Cons_Prod_Cate_Titulo(&$categorias,&$titulo,&$array,&$ok,&$pages,&$cantidad,&$estado) { /* * funcion que recibe variables * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $sqlproducto_publicado-> Cons_Prod_Cate_Titulo($categorias,$titulo,$array,$ok,$pages,$cantidad,$estado); $link->__sleep(); } function total_registro_usuario(&$categorias,&$titulo,&$usuario) { /* * funcion que recibe dos variable * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado * para presentar las contendos de un usuario espedifico */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $cont =$sqlproducto_publicado->total_registro($categorias,$titulo,$usuario); $link->__sleep(); return $cont;} Gráfico No.1.21d. Clase cls_transProducto_publicado 102 function Cons_Prod_Cate_Titulo_Usuario(&$categorias,&$titulo,&$array,&$ok,&$pages,&$cantidad,&$usuario) { /* * funcion que recibe variables * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado=new cls_sqlproducto_publicado($link); $sqlproducto_publicado-> Cons_Prod_Cate_Titulo_Usuario($categorias,$titulo,$array,$ok,$pages,$cantidad,$usuario); $link->__sleep(); } function consulta_vectorTOP5(&$array, &$ok) { /* * funcion que recibe una variable tipo arreglo y una bandera * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $sqlproducto_publicado->consulta_vectorTOP5($array, $ok); $link->__sleep(); } function consulta_oferta(&$array, &$ok) { /* * funcion que recibe una variable tipo arreglo y una bandera * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $sqlproducto_publicado->consulta_oferta($array, $ok); $link->__sleep(); } function consulta_vector_ult_user( $usuario) { $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $array =$sqlproducto_publicado->consulta_vector_ult_user(); $link->__sleep(); return $array; } function consulta_vector_suscriptor( &$usuario, &$array, &$ok) { /* * funcion que recibe una variable tipo clase y una bandera * Crea un metodo de clae tipo cls_sqlproduto_publicado * E invoca al metodo de tipo cls_sqlproducto_publicado */ $link=new DB_mysql(); $sqlproducto_publicado = new cls_sqlproducto_publicado($link); $sqlproducto_publicado->consulta_vector_suscriptor($usuario, $array, $ok); $link->__sleep(); } } ?> Gráfico No.1.21e. Clase cls_transProducto_publicado 103 1.4.14 cls_gestor Ubicación: /lib/clases/ clases/gestor/cls_gestor.php <?php class cls_gestor_pagos{ /* * declaracion de variables de las clases */ public static $num_factura; public static $valor_factura; public static $tipo; public static $pais; public static $nombre; public static $apellido; public static $tipo_tarjeta; public static $num_tarjeta; public static $password; public static $anio; public static $mes; public static $ciudad; public static $direccion; public static $email; public static $telefono; public static $autorizacion; public static $emisor; public static $fecha; /* * funciones que tienen sufijos get * retorno de valor de variables declase */ public function getNum_factura() { return $this->num_factura; } /* * funciones que tienen sufijos set * metodo que asigna valores * a las variables de clase */ function setNum_factura($num_factura) { $this->num_factura = $num_factura; } public function getValor_factura() { return $this->valor_factura; } function setValor_factura($valor_factura) { $this->valor_factura = $valor_factura; } public function getTipo() { return $this->tipo; } function setTipo($tipo) { $this->tipo = $tipo; } Gráfico No.1.22a. Clase cls_gestor 104 public function getPais() { return $this->pais; } function setPais($pais) { $this->pais = $pais; } public function getNombre() { return $this->nombre; } function setNombre($nombre) { $this->nombre = $nombre; } public function getApellido() { return $this->apellido; } function setApellido($apellido) { $this->apellido = $apellido; } public function getTipo_tarjeta() { return $this->tipo_tarjeta; } function setTipo_tarjeta($tipo_tarjeta) { $this->tipo_tarjeta = $tipo_tarjeta; } public function getNum_tarjeta() { return $this->num_tarjeta; } function setNum_tarjeta($num_tarjeta) { $this->num_tarjeta = $num_tarjeta; } public function getPassword() { return $this->password; } // el resto de variables se encuentran sobre entendidadas Gráfico No.1.22b. Clase cls_gestor 105 1.4.15 cls_sqlgestor Ubicación: /lib/clases/ clases/gestor/cls_sqlgetor.php <?php class cls_sqlgestor { var $link; function __construct(DB_mysql $DB_mysql) { $this->link=$DB_mysql; } function gestionar_cancelacion(cls_gestor_pagos &$mygestor, &$ok) { /* * Funcion que actualiza los campos referentes a los pagos de las * descargas. */ /* * inserta en la tabla tbpv_descarga */ $ssql=" update tbpv_descarga set"; $ssql.=" wde_ban_efec='".config_si; $ssql.="' , wde_fecha_efectivo=".$mygestor->getFecha(); $ssql.=" , wde_num_pago =".$mygestor->getAutorizacion(); $ssql.=" , wde_nombre_apellido='".$mygestor->getNombre().' '.$mygestor->getApellido(); $ssql.="' ,wde_vencimiento='".$mygestor->getAnio().'-'.$mygestor->getMes(); $ssql.="' ,wde_num_tarjeta='".$mygestor->getNum_tarjeta(); $ssql.="' ,wde_tipo_tarjeta=".$mygestor->getTipo_tarjeta(); $ssql.=" where wde_numero=".$mygestor->getNum_factura(); $ssql.=" and wde_ban_efec = '".config_no; $ssql.="' and wde_estado='".config_estado_act."'"; if (!@mysql_query($ssql)) { die('Error en update descarga: '.mysql_error()); $ok=0; return 0; } /* * Actualiza la bandera de efectivacion * de la tabla tbpv_detalle_descarga */ $ssql=" update tbpv_detalle_descarga set "; $ssql.=" wdd_ban_efec='".config_si; $ssql.="' , wdd_fecha_efectivo=".$mygestor->getFecha(); $ssql.=" , wdd_num_pago ='".$mygestor->getAutorizacion() ; $ssql.="' , wdd_nombre_apellido ='".$mygestor->getNombre().' '.$mygestor->getApellido() ; $ssql.="' , wdd_f_caducidad ='".$mygestor->getAnio().'-'.$mygestor->getMes(); $ssql.="' , wdd_num_tarjeta='".$mygestor->getNum_tarjeta(); $ssql.="' , wdd_tipo_tarjeta=".$mygestor->getTipo_tarjeta(); $ssql.=" where wdd_numero=".$mygestor->getNum_factura(); $ssql.=" and wdd_ban_efec='".config_no; $ssql.="' and wdd_estado='".config_estado_act."'"; if (!@mysql_query($ssql)) { $ok=0; die('Error en update detalle descarga: '.mysql_error()); return 0; } Gráfico No.1.23a. Clase cls_sqlgestor 106 /* * Consulta de detalle preguntando si se encuentra * acreditado para seguir realizando las actualizaciones nesesarias */ $ssql=" select * from tbpv_detalle_descarga "; $ssql.=" where wdd_numero=".$mygestor->getNum_factura(); $ssql.=" and wdd_ban_efec='S'"; $ssql.=" and wdd_estado='A'"; $rs=mysql_query($ssql); if (!$rs) { die('detalle de desacarga Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { Gráfico No. Clase cls_transProducto_publicado.php while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $mydetdescarga=new cls_detalle_descarga(); $mydetdescarga->setCod_producto($row['wdd_cod_producto']); $mydetdescarga->setAlias_compra($row['wdd_alias_compra']); $mydetdescarga->setCantidad($row['wdd_cantidad']); $mydetdescarga->setFecha_efectivo($row['wdd_fecha_efectivo']); $mydetdescarga->setValor_neto($row['wdd_valor_neto']); $mydetdescarga->setValor_comision($row['wdd_valor_comision']); $mydetdescarga->setPorc_com($row['wdd_porc_com']); $mydetdescarga->setValor_total($row['wdd_valor_total']); $mydetdescarga->setAlias_bajado($row['wdd_alias_bajado']); /* * realiza la insercion en la tabla tbpv_producto_descargado * para la la validacion del numero de posiblidades de * de descargas. */ $ssql=" INSERT INTO tbpv_producto_descargado(wpd_clave, "; $ssql.=" wpd_producto, wpd_contador, wpd_contador_maximo,"; $ssql.=" wpd_fecha_descarga, wpd_fecha_maxima, wpd_alias_compra,"; $ssql.=" wpd_ban_realizado) VALUES( "; $ssql.= $mygestor->getNum_factura(); $ssql.= " , ".$mydetdescarga->getCod_producto(); $ssql.= " , 0"; $ssql.= " , ".config_max_desc; $ssql.= " ,CURDATE()"; $ssql.= " ,CURDATE()+".config_max_dias_des; $ssql.= " , '".$mydetdescarga->getAlias_compra(); $ssql.= "' , 'N'"; $ssql.= ")"; if (!@mysql_query($ssql)) //if 1 { die('Could not connect:'.mysql_error()); $ok=0; return 0; }//fin de if 1 /* * insertar en el control de productos. */ $ssql = " INSERT INTO tbpv_control_producto(wcp_numero, "; $ssql.=" wcp_cod_producto, wcp_cantidad, wcp_fecha_efectivo,"; $ssql.=" wcp_valor_neto, wcp_valor_comision, wcp_por_comision,"; $ssql.=" wcp_valor_total, wcp_alias_compra, wcp_anio, wcp_mes,"; $ssql.=" wcp_alias_publicado) VALUES("; $ssql.=$mygestor->getNum_factura(); $ssql.= " , ".$mydetdescarga->getCod_producto(); $ssql.= " , ".$mydetdescarga->getCantidad(); $ssql.= " , '".$mydetdescarga->getFecha_efectivo(); $ssql.= "' , ".$mydetdescarga->getValor_neto(); $ssql.= " , ".$mydetdescarga->getValor_comision(); Gráfico No.1.23b. Clase cls_sqlgestor 107 $ssql.= " , ".$mydetdescarga->getPorc_com(); $ssql.= " , ".$mydetdescarga->getValor_total(); $ssql.= " , '". $mydetdescarga->getAlias_compra(); $ssql.= "' , year(CURDATE())"; $ssql.= ", month(CURDATE())"; $ssql.= ", '". $mydetdescarga->getAlias_bajado(); $ssql.= "')"; if (!@mysql_query($ssql))// if 2 { die('tbpv_control_producto Could not connect:'.mysql_error()); $ok=0; return 0; }// fin if 2 /* * Actualiza tbpv_producto_publicado el campo de * numero de descargas... */ $ssql=" update tbpv_producto_publicado set "; $ssql.=" wpp_numero_descarga=wpp_numero_descarga+1"; $ssql.=" where wpp_clave=".$mydetdescarga->getCod_producto(); if (!@mysql_query($ssql))// if 3 { die('Could not connect:'.mysql_error()); $ok=0; return 0; } $ssql=" SELECT wps_clave, wps_alias_publicado, wps_anio, wps_mes "; $ssql.=" FROM tbpv_producto_suscriptor "; $ssql.=" where wps_clave=".$mydetdescarga->getCod_producto(); $ssql.=" and wps_alias_publicado='".$mydetdescarga->getAlias_bajado()."'"; $ssql.=" and wps_anio=year(curdate()) "; $ssql.=" and wps_mes = month(curdate())"; $rs_1=mysql_query($ssql); if (!$rs_1)// if 4 { die('Error_select tbpv_producto_suscriptor :'.mysql_error()); return 0; } else { if(mysql_num_rows($rs_1)>0)// if 5 { /* * actualiza el contador tbpv_producto_suscriptor * para conocer el numero de descargas por suscriptor */ $ssql=" update tbpv_producto_suscriptor set "; $ssql.=" wps_cont_cifrado=wps_cont_cifrado+1"; $ssql.=" , wps_contador = wps_contador + 1"; $ssql.=" , wps_neto=wps_neto+".$mydetdescarga>getValor_neto(); $ssql.=" , wps_valor_comision=wps_valor_comision+".$mydetdescarga->getValor_comision(); $ssql.=" , wps_valor_total=wps_valor_total+".$mydetdescarga>getValor_total(); $ssql.=" where wps_clave=".$mydetdescarga>getCod_producto(); $ssql.=" and wps_alias_publicado='".$mydetdescarga>getAlias_bajado()."'"; $ssql.=" and wps_anio=year(curdate())"; $ssql.=" and wps_mes=month(curdate())"; Gráfico No.1.23c. Clase cls_sqlgestor 108 if (!@mysql_query($ssql)) { die('tbpv_producto_suscriptor Could not connect:'.mysql_error()); $ok=0; return 0; } } else { /* * registrar tbpv_producto_suscriptor */ $ssql=" INSERT INTO tbpv_producto_suscriptor(wps_clave,"; $ssql.=" wps_alias_publicado, wps_anio, wps_mes,"; $ssql.=" wps_cont_cifrado, wps_contador, wps_neto,"; $ssql.=" wps_valor_comision, wps_valor_total,"; $ssql.=" wps_ban_realizado) VALUES("; $ssql.=$mydetdescarga->getCod_producto(); $ssql.=" ,'".$mydetdescarga->getAlias_bajado()."'"; $ssql.=" , year(curdate()) "; $ssql.=" , month(curdate())"; $ssql.=" ,1,1,".$mydetdescarga->getValor_neto(); $ssql.=" , ".$mydetdescarga->getValor_comision(); $ssql.=" , ".$mydetdescarga->getValor_total(); $ssql.=" , 'N')"; if (!@mysql_query($ssql)) { die('Could not connect:'.mysql_error()); $ok=0; return 0; } }//fin if 5 } // fin if 4 /* * realiza la consulta de tbpv_movimiento_financiero * para determinado mes */ $ssql=" SELECT wmf_alias, wmf_anio, wmf_mes "; $ssql.=" FROM tbpv_movimiento_financiero "; $ssql.=" where wmf_alias='".$mydetdescarga>getAlias_bajado()."'"; $ssql.=" and wmf_anio=year(curdate()) "; $ssql.=" and wmf_mes = month(curdate())"; $rs_2=mysql_query($ssql);// if 6 if (!$rs_2) { die('Error_select tbpv_producto_suscriptor :'.mysql_error()); return 0; } else { if(mysql_num_rows($rs_2)>0)// if 7 { /* * actualiza los movimientos tbpv_movimiento_financiero * incrementandolos */ $ssql=" update tbpv_movimiento_financiero set "; Gráfico No.1.23d. Clase cls_sqlgestor 109 $ssql.=" wmf_valor_neto=wmf_valor_neto+".$mydetdescarga->getValor_neto(); $ssql.=" , wmf_valor_neto=wmf_valor_neto+".$mydetdescarga->getValor_comision(); $ssql.=" , wmf_total=wmf_total+".$mydetdescarga->getValor_total(); $ssql.=" where wmf_alias='".$mydetdescarga->getAlias_bajado()."'"; $ssql.=" and wmf_anio=year(curdate())"; $ssql.=" and wmf_mes=month(curdate())"; if (!@mysql_query($ssql)) { die('Could not connect:'.mysql_error()); $ok=0; return 0; } } else { /* * insertar tbpv_movimiento_financiero de pago */ $ssql=" INSERT INTO tbpv_movimiento_financiero(wmf_alias,"; $ssql.=" wmf_anio, wmf_mes, wmf_valor_comision, "; $ssql.=" wmf_valor_neto, wmf_total, wmf_ban_pago,"; $ssql.=" wmf_estado, wmf_acumulado) VALUES('"; $ssql.=$mydetdescarga->getAlias_bajado()."'"; $ssql.=" ,year(curdate()),month(curdate())"; $ssql.=" , ".$mydetdescarga->getValor_comision(); ssql.=" , ".$mydetdescarga->getValor_neto(); $ssql.=" ,".$mydetdescarga->getValor_total(); $ssql.=" , 'N','A','N')"; if (!@mysql_query($ssql)) { die('Could not connect:'.mysql_error()); $ok=0; return 0; } }// fin if 7 }//fin if 6 }//fin while mysql_free_result($rs); $ok=1; }// fin if else { $ok=0; } } //fin if } function cancelar_orden(cls_gestor_pagos &$mygestor, &$ok) { /* * Funcion que gestiona los insert en las tablas de simulacion */ $ssql=" select * from tbpp_datos_financiero "; $ssql.= " where pdf_nombre ='".$mygestor->getNombre(); $ssql.= "' and pdf_apellido ='".$mygestor->getApellido(); $ssql.= "' and pdf_tipo_cuenta = ".$mygestor->getTipo_tarjeta(); Gráfico No.1.23e. Clase cls_sqlgestor 110 $ssql.= " and pdf_num_tarjeta ='".$mygestor->getNum_tarjeta()."'"; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)>0) { /* * actualiza tbpp_datos_financierocon los datos nuevos */ $ssql="update tbpp_datos_financiero set "; $ssql.= " pdf_contrasena = '".$mygestor->getPassword(); $ssql.= "' , pdf_mes=".$mygestor->getMes(); $ssql.= " , pdf_anio=".$mygestor->getAnio(); $ssql.= " , pdf_pais=".$mygestor->getPais(); $ssql.= " , pdf_telefono='".$mygestor->getTelefono(); $ssql.= "' , pdf_direccion='".$mygestor->getDireccion(); $ssql.= "' , pdf_ciudad='".$mygestor->getCiudad(); $ssql.= "' , pdf_mail ='".$mygestor->getEmail(); $ssql.= "' where pdf_nombre='".$mygestor->getNombre(); $ssql.= "' and pdf_apellido ='".$mygestor->getApellido(); $ssql.= "' and pdf_tipo_cuenta = ".$mygestor->getTipo_tarjeta(); $ssql.= " and pdf_num_tarjeta ='".$mygestor->getNum_tarjeta()."'"; echo $ssql; //die; } else { /* * realiza la insercion de los datos * nuevos */ $ssql=" insert into tbpp_datos_financiero ( pdf_nombre, pdf_apellido,"; $ssql.= " pdf_tipo_cuenta, pdf_num_tarjeta, pdf_contrasena, pdf_mes,"; $ssql.= " pdf_anio, pdf_pais, pdf_telefono, pdf_direccion, pdf_ciudad, pdf_mail"; $ssql.= " ) values ('"; $ssql.= $mygestor->getNombre()."'"; $ssql.= ",'".$mygestor->getApellido(); $ssql.= "',".$mygestor->getTipo_tarjeta(); $ssql.= " , '".$mygestor->getNum_tarjeta(); $ssql.= "', '".$mygestor->getPassword(); $ssql.= "' , ".$mygestor->getMes(); $ssql.= " , ".$mygestor->getAnio(); $ssql.= " , ".$mygestor->getPais(); $ssql.= " , '".$mygestor->getTelefono(); $ssql.= "' , '".$mygestor->getDireccion(); $ssql.= "' , '".$mygestor->getCiudad(); $ssql.= "' , '".$mygestor->getEmail(); $ssql.= "')"; } if (!@mysql_query($ssql)) { die('Mensaje'. mysql_error()); $ok=0; exit(); } } /* recupera el dia actual*/ $ssql=" Select CURDATE() as fecha "; $rs=mysql_query($ssql); Gráfico No.1.23f. Clase cls_sqlgestor 111 if (!$rs) { die('Mensaje'. mysql_error()); } else { if(mysql_num_rows($rs)>0) { while($row=mysql_fetch_array($rs,MYSQL_ASSOC)) { $mygestor->setFecha($row['fecha']); } } } $var_codigo; $var_secuencia; /* * recupera el numero de actualizacion de pago */ $ssql=" Select max(pmf_clave) + 1 as secuencia "; $ssql.=" from tbpp_mov_finaciero "; $rs=mysql_query($ssql); if (!$rs) { $var_secuencia=1; die('Mensaje'. mysql_error()); } else { if(mysql_num_rows($rs)>0) { while($row=mysql_fetch_array($rs,MYSQL_ASSOC)) { /* * asignacion de autorizacion a variable */ if($row['secuencia'] == NULL) { $var_secuencia=1; } else {$var_secuencia=$row['secuencia'];} } } } $var_codigo=str_repeat('0',8-strlen($var_secuencia)).$var_secuencia; $mygestor->setAutorizacion($var_codigo); $ssql=" INSERT INTO tbpp_mov_finaciero(pmf_clave, pmf_codigo, pmf_factura,"; $ssql.=" pmf_emisor, pmf_tipo_tarjeta, pmf_num_tarjeta, pmf_valor, pmf_tipo_fact,pmf_fecha)" ; $ssql.=" VALUES("; $ssql.= $var_secuencia; $ssql.=" ,'".$var_codigo; $ssql.="',".$mygestor->getNum_factura() ; $ssql.=" , '".$mygestor->getEmisor(); $ssql.="',".$mygestor->getTipo_tarjeta(); $ssql.= ",'".$mygestor->getNum_tarjeta(); $ssql.= "', ".$mygestor->getValor_factura(); $ssql.= ",'".$mygestor->getTipo(); $ssql.= "',CURDATE())"; Gráfico No.1.23g. Clase cls_sqlgestor 112 $ssql.= $var_secuencia; $ssql.=" ,'".$var_codigo; $ssql.="',".$mygestor->getNum_factura() ; $ssql.=" , '".$mygestor->getEmisor(); $ssql.="',".$mygestor->getTipo_tarjeta(); $ssql.= ",'".$mygestor->getNum_tarjeta(); $ssql.= "', ".$mygestor->getValor_factura(); $ssql.= ",'".$mygestor->getTipo(); $ssql.= "',CURDATE())"; else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $var_fecha=$row['fecha']; } } } /* * verifica si existe ya una descarga de ese recurso * por la orden de descarga. */ $ssql=" select wpd_clave, wpd_contador,wpd_fecha_maxima from tbpv_producto_descargado "; $ssql.=" where wpd_clave =".$orden; $ssql.=" and wpd_producto=".$producto; $ssql.=" and wpd_ban_realizado='N'"; $rs=mysql_query($ssql); if (!$rs) { die('Error_select tbpv_producto_descargado :'.mysql_error()); return 0; } else { if(mysql_num_rows($rs)>0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { $var_contador = $row['wpd_contador']; $var_fecha_max= $row['wpd_fecha_maxima']; } /* * si existe el recurso valida el numero de descarga * para cambiar el estado del registro. */ if(($var_contador==config_max_desc)||($var_fecha_max<$var_fecha) ) { $ssql=" update tbpv_producto_descargado set "; $ssql.=" wpd_ban_realizado = 'S' "; $ssql.=" where wpd_clave =".$orden; $ssql.=" and wpd_producto=".$producto; $rs=mysql_query($ssql); if (!$rs) { die('tbpv_producto_descargado Could not connect:'.mysql_error()); } } if(($var_contador<config_max_desc)||($var_fecha_max>$var_fecha) ) { $ssql=" update tbpv_producto_descargado set "; Gráfico No.1.23h. Clase cls_sqlgestor 113 $ssql.=" wpd_contador = wpd_contador+1 "; $ssql.=" where wpd_clave =".$orden; $ssql.=" and wpd_producto=".$producto; $ssql.=" and wpd_ban_realizado='N'"; $rs=mysql_query($ssql); if (!$rs) { die('restar Could not connect:'.mysql_error()); } } } else { /* * si no existe este producto se lo inserta del detalle de * descarga. */ $ssql=" select * from tbpv_detalle_descarga "; $ssql.=" where wdd_numero=".$orden; $ssql.=" and wdd_cod_producto =".$producto; $ssql.=" and wdd_ban_efec='S'"; $ssql.=" and wdd_estado='A'"; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } else { if(mysql_num_rows($rs)<0) { while ($row = mysql_fetch_array($rs, MYSQL_ASSOC)) { /* * insertar tbpv_producto_descargado los datos nuevos */ $ssql=" INSERT INTO tbpv_producto_descargado(wpd_clave, "; $ssql.=" wpd_producto, wpd_contador, wpd_contador_maximo,"; $ssql.=" wpd_fecha_descarga, wpd_fecha_maxima, wpd_alias_compra,"; $ssql.=" wpd_ban_realizado) VALUES( "; $ssql.= $orden; $ssql.= " , ".$producto; $ssql.= " , 0"; $ssql.= " , ".config_max_desc; $ssql.= " ,CURDATE()"; $ssql.= " ,CURDATE()+".config_max_dias_des; $ssql.= " , '".$row['wdd_alias_compra']; $ssql.= "' , 'N'"; $ssql.= ")"; if (!@mysql_query($ssql)) { die('Could not connect:'.mysql_error()); return 0; } } }}} }//fin else} $ok=1; }// fin de funcion gestionar descarga. } }//fin else } Gráfico No.1.23i. Clase cls_sqlgestor 114 function gestionar_suscripcion(cls_gestor_pagos &$mygestor, &$ok) { /* * Funcion que actualiza los campos referentes a los pagos de las * descargas. */ $ssql =" update tbpv_tarifa_suscriptor set"; $ssql.=" wtu_ban_efec='".config_si; $ssql.="' , wtu_fecha_efec=".$mygestor->getFecha(); $ssql.=" , wtu_autorizacion =".$mygestor->getAutorizacion(); $ssql.=" , wtu_nombre_apellido='".$mygestor->getNombre().' '.$mygestor->getApellido(); $ssql.="' ,wtu_vencimiento='".$mygestor->getAnio().'-'.$mygestor->getMes(); $ssql.="' ,wtu_num_tarjeta='".$mygestor->getNum_tarjeta(); $ssql.="' ,wtu_tipo_tarjeta=".$mygestor->getTipo_tarjeta(); $ssql.=" where wtu_codigo=".$mygestor->getNum_factura(); $ssql.=" and wtu_ban_efec = '".config_no; $ssql.="' and wtu_estado='".config_estado_act."'"; if (!@mysql_query($ssql)) { die('Error en update descarga: '.mysql_error()); $ok=0; return 0; } } function gestionar_anulacion($id_orden, &$ok) { /* * permite realizar las anulaciones respectivas * a las ordenes que no se requieran pagar */ $ok=0; $ssql=" update tbpv_descarga set wde_estado ='I'"; $ssql.= " where wde_numero =".$id_orden; echo $ssql; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } $ssql=" update tbpv_detalle_descarga set wdd_estado ='I'"; $ssql.= " where wdd_numero =".$id_orden; $rs=mysql_query($ssql); if (!$rs) { die('Could not connect:'.mysql_error()); } $ok=1; } }?> Gráfico No.1.23j. Clase cls_sqlgestor 115 1.4.16 cls_transgestor Ubicación: /lib/clases/ clases/gestor/cls_transgestor.php <?php class cls_transgestor { /* * metodos que accesan a las cls_sqlgestor * para realizar las sentencias requeridas. */ function __construct() { } function gestionar_cancelacion(cls_gestor_pagos $mygestor, &$ok) { /* * con el objeto y la variable ingresan los datos a la base * por el metodo gestionar_cancelacion */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlgestor= new cls_sqlgestor($link);// crea un objeto tipo cls_sqlgestor $mysqlgestor->gestionar_cancelacion( $mygestor, $ok);// llama a metodo $link->__sleep();// cierra conexion } function cancelar_orden(cls_gestor_pagos $mygestor, &$ok) { /* * con el objeto y la variable ingresan los datos a la base * por el metodo gestionar_cancelacion */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlgestor= new cls_sqlgestor($link);// crea un objeto tipo cls_sqlgestor $mysqlgestor->cancelar_orden( $mygestor, $ok);// llama a metodo $link->__sleep();// cierra conexion } function gestionar_descarga($orden, $producto, &$ok) { /* * con el objeto y la variable ingresan los datos a la base * por el metodo gestionar_descarga para el registro * de la descargas */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlgestor= new cls_sqlgestor($link); // crea un objeto tipo cls_sqlgestor $mysqlgestor->gestionar_descarga($orden, $producto, $ok);// llama a metodo $link->__sleep();// cierra conexion } Gráfico No.1.24a. Clase cls_transgestor 116 function gestionar_suscripcion(cls_gestor_pagos $mygestor, &$ok) { /* * con el objeto y la variable ingresan los datos a la base * por el metodo gestionar_suscripcion para el registro * de la cancelacion de suscripcion */ $link=new DB_mysql(); // crea un objeto tipo DB_mysql $mysqlgestor= new cls_sqlgestor($link);// crea un objeto tipo cls_sqlgestor $mysqlgestor->gestionar_suscripcion( $mygestor, $ok);// llama a metodo $link->__sleep();// cierra conexion } function gestionar_anulacion($id_orden, &$ok) { /* * con la variable ralaiza la anulacion * de la orden de descargas. */ $link=new DB_mysql();// crea un objeto tipo DB_mysql $mysqlgestor= new cls_sqlgestor($link);// crea un objeto tipo cls_sqlgestor $mysqlgestor->gestionar_anulacion($id_orden, $ok);// llama a metodo $link->__sleep();// cierra conexion } }?> Gráfico No.1.24b. Clase cls_transgestor 117 1.4.17 Descargar.php Pagina que se encarga de presentar los ítems que se podrá descargar. Ubicación: decargar.php <?php // añade las librerias include ("./lib/lib.inc.php"); /* pagina que presenta la orden * para realizar la descarga*/ class PaginaWeb extends PlantillaHtml{ var $ok; var $array; var $id_orden; function PreProceso() { // verifica que haya una session if(!isset($_SESSION['usuario'])) { header('location:'.config_live_site.'login.php'); } // recupera el numero de la oreden de descargas if ((isset($_GET['id_orden']))||(isset($_POST['id_orden']))) { if(isset($_GET['id_orden'])) { $this->id_orden=$_GET['id_orden']; } if(isset($_POST['id_orden'])) { $this->id_orden=$_POST['id_orden']; } } } function SeccionCentroMostrarHtml() { $this->ok=0; $this->array=array(); $this->opcion='ok'; if($this->opcion=='ok') { // genera el detalle para realizar la descarga $mytransdetdescarga=new cls_transdetalle_ds();// crea un objeto de tipo cls_transdetalle_ds /* * llama a la funcion consultar_x_orden_desc * la que se encarga de recuperar la orden de descarga */ $mytransdetdescarga->consultar_x_orden_desc($this->id_orden,$this->array ,$this->ok); if ($this->ok==1)// por verdadero { $mybox = new CuadroHtml('Descargar','90%',"ZG",0,1, '',0,1,1);// crea el cuadro $mybox->Agregar(0,0,"Codigo"); $mybox->Agregar(1,0,"Descripcion"); $i=0; while ($i<count($this->array)) { /* * añade los datos de la consulta a la tabla */ $mybox->Agregar(0,$i+1,$this->array[$i]->getCodigo()); $mybox->Agregar(1,$i+1,$this->array[$i]->getDescripcion()); Gráfico No.1.25a. descargar.php 118 $mybox->Agregar(2,$i+1 , $this->array[$i]->getNum_descarga()); // link que ejecuta la descarga $url="<a href='".config_live_site."download.php?clave=".$this->array[$i]>getClave()."&id_orden=".$this->id_orden."'>descargar</a>"; if ($this->array[$i]->getNum_descarga()!=config_max_desc) {$mybox->Agregar(3,$i+1, $url);} $i++; } $mybox->MostrarHtml(); } $j=0; } } } $mypagina = new PaginaWeb('Descarga'); $mypagina->MostrarHtml(); ?> Gráfico No.1.25b. descargar.php 1.4.18 Download.php Pagina que realiza la descarga individual del contenido recibe por get el id_orden y la clave del contenido con la cual evaluara si tiene la oportunidad. Ubicación: download.php <?PHP include ("./lib/lib.inc.php"); /* pagina que permite * realizar la descarga de archivos. */ $clave=$_GET['clave']; $id_orden=$_GET['id_orden']; $var_direccion; $var_len; $var_contador; $ok=0; $mytransde_desc=new cls_transdetalle_ds(); // sensa que tenga posibilidad de descarga $mytransde_desc->consulta_oportunidad($id_orden,$clave,$ok,$var_contador); if ($ok==1) { if ($var_contador<config_max_desc) { Gráfico No.1.26a. Download.php 119 // realiza la consulta de la ruta y el nombre del archivo que se requiere descargar $ok=0; $mytransgestor=new cls_transgestor(); $mytransgestor->gestionar_descarga($id_orden,$clave,$ok); if ($ok==1) { $link=new DB_mysql(); $ssql=" select wpp_direccion, wpp_codigo, wpp_tipo_archivo from tbpv_producto_publicado where wpp_clave=".$clave; $rs = mysql_query($ssql); if($rs) { if(mysql_num_rows($rs)>0) { $row = mysql_fetch_array($rs, MYSQL_ASSOC); $var_direccion=$row['wpp_direccion'].$row['wpp_codigo'].config_extension; $var_len=filesize($var_direccion); // lineas que permiten realizar las descargas. header("Content-type: application/force-download"); header("Content-Transfer-Encoding: Binary"); header("Content-length: ".$var_len); header("Content-disposition: attachment; filename=\"".basename($var_direccion)."\""); echo file_get_contents ($var_direccion);// presentar } } else { die('Could not connect:'.mysql_error()); } $link->__sleep(); header ("location:".$_SERVER['HTTP_REFERER']); // regresa a la pantalla que lo llamo } } else { header ("location:".$_SERVER['HTTP_REFERER']); // regresa a la pantalla que lo llamo } } ?> Gráfico No.1.26b. Download.php 120 1.4.19 Admincontrolcontenido.php Pagina que presenta la búsqueda de los contenidos por parte del administrador. Envia datos por get para realizar la respectiva búsqueda de manera paginada son presentados lo sresultados. Ubicación: admincontrolcontenido.php <?php /* * Pagina que presenta todo el contenido que se encuentra * en nuestras bases de datos */ include ("lib/lib.inc.php"); class PaginaWeb extends PlantillaAdminHtml { /* * Declaracion de variables que se utilizan en esta clase */ var $array; var $ok; var $MostrarSeccionDerecha=false; var $MostrarSeccionArribaCentro=true; var $categoria; var $titulo; var $pages; var $cantidad; var $total_reg; var $estado; function PreProceso() { /* * Atrapa los parametros que son enviados por el formulario despues de sensar * el inicio de una secion como asuario administrador, puesto que si no cumple no le permitira ingresar * a dicha pagina. */ if(!isset($_SESSION['admin'])) { header('location: '.config_live_site.'admin.php'); exit(); } if (!isset($_GET["categoria"])) { $this->categoria=0; } else {$this->categoria=$_GET["categoria"];} if (!isset($_GET["titulo"])) {$this->titulo="";} else {$this->titulo=$_GET["titulo"];} if (!isset($_GET["pagina"])) { $this->pages=0;} else {$this->pages=$_GET["pagina"];} Gráfico No.1.27a. admincontrolcontenidos.php 121 if (!isset($_GET["estado_prod"])) { $this->estado=1;} else {$this->estado=$_GET["estado_prod"];} $this->cantidad=20; if (isset($_GET["categoria"])&&(isset($_GET["titulo"]))&&(isset($_GET["estado_prod"]))) { /* * recupera el total de registros que contiene el * producto dependiendo la categoria. */ $mytransproducto = new cls_transproducto_publicado(); $this->total_reg=$mytransproducto->total_registro($this->categorias,$this->titulo,$this->estado); } } function SeccionCentroMostrarHtml() { /* * Genera el formulario que realiza las busquedas respectivas * x categoria de los contenidos requeridos. */ echo "<form name='buscar' action='".config_live_site."admincontrolcontenido.php' method='GET' enctype='multipart/form-data'>"; echo "<table width=\"100%\" height=\"12\" >"; echo "<tr>"; echo "<td width=\"20%\" height=\"2\" class=\"layout_cuadroZGpie\" align=\"right\">"; $this->array=array(); $this->ok=0; $i=0; $mytranscategoria= new cls_transcategoria(); $mytranscategoria->consulta_categoria($this->array,$this->ok); if($this->ok==1) { $var_cadena="<select name='categoria' id='categoria' class='layout_peq' > "; while ($i<count($this->array)) { if ($this->categoria==$this->array[$i]->getCodigo()) { $selec="selected";} else {$selec="";} $var_cadena.="<option value='".$this->array[$i]->getCodigo()."' $selec > ".$this->array[$i]->getDescripcion()."</option>"; $i++; } $var_cadena.="</font></select>"; } echo "Categoria: ".$var_cadena; $var_cadena2="<input type='text' id='titulo' name='titulo' size='26' class='layout_peq' value='$this->titulo'>"; echo "Titulo: ".$var_cadena2; $this->array=array(); $this->ok=0; $var_cadena=""; // realiza la consulta de la consulta. $myestado= new cls_TransEstado_Producto(); $myestado->consulta_todos($this->array,$this->ok); if($this->ok==1) { $i=0; // crea el combo $var_cadena="<select name='estado_prod' id='estado_prod' class='layout_peq' >"; Gráfico No.1.27b. admincontrolcontenidos.php 122 while ($i<count($this->array)) { if ($this->estado==$this->array[$i]->getClave()) { $selec="selected";} else {$selec="";} $var_cadena.="<option value='".$this->array[$i]->getClave()."' $selec >".$this->array[$i]->getDescripcion()."</option>"; $i++; } $var_cadena.="</select>"; } echo "Estado:".$var_cadena; $var_cadena="&nbsp;<input type='submit' value ='Buscar' class='layout_peq'>"; echo $var_cadena; echo "</td>"; echo "</tr>"; echo "</table>"; echo "</form>"; /*Genera la paginacion correspondiente de la busqueda realizada. */ $this->array=array(); $this->ok=0; $num_pagina = intval($this->total_reg/$this->cantidad); $pie=""; if ($this->pages <> 0) { // crea el link de anterior, realiza el calculo correspondiente $pag = $this->pages - 1; $url=config_live_site."admincontrolcontenido.php?categoria=$this>categoria&titulo=$this->titulo&pagina=$pag&estado=$this->estado&"; $miVinculo = new VinculoUrl("« Anterior",$url); $pie.= $miVinculo->Vaciar();// agrega el link } else { $pie.= '' ; } for ($i=0 ;$i<($num_pagina+1); $i++) { if ($this->pages==$i) { $pie.="<".$i.">";}// genera la cadena con el numero else { $url=config_live_site."admincontrolcontenido.php?categoria=$this->categoria&titulo=$this>titulo&pagina=$i&estado=$this->estado&"; $miVinculo = new VinculoUrl($i,$url); $pie.="<".$miVinculo->Vaciar().">&nbsp;";// crea la cadena de las paginas } } if ($this->pages < $num_pagina) { /* * crea el link siguiente. */ $pag = $this->pages + 1; $url=config_live_site."admincontrolcontenido.php?categoria=$this>categoria&titulo=$this->titulo&pagina=$pag&estado=$this->estado&"; $miVinculo = new VinculoUrl("Siguiente »",$url,'mainlevel'); $pie.= $miVinculo->Vaciar(); Gráfico No.1.27c. admincontrolcontenidos.php 123 } else { $pie.= ''; } echo "<br>"; // crea objeto tipo cls_transproducto_publicado $mytransproducto = new cls_transproducto_publicado(); // realiza la consulta $mytransproducto->Cons_Prod_Cate_Titulo($this->categoria,$this->titulo, $this->array, $this>ok,$this->pages,$this->cantidad,$this->estado); if($this->ok==0) { $mybox = new CuadroHtml('Resultados ',230,"ZG",0,1,"",0,0,0); $mybox->Agregar(0,0,"No existen Datos Con estos parametros indicados "); } else { /* * presenta el resultado de la busqueda realizada */ $mybox = new CuadroHtml('Resultados','90%',"ZG",0,1, $pie,1,1,1); $mybox->Agregar(0,0,'Codigo'); $mybox->Agregar(1,0,'Titulo'); $mybox->Agregar(2,0,'Resumen'); $mybox->Agregar(3,0,'Ver'); $mybox->Agregar(4,0,'Estado'); $i=0; while($i<count($this->array)) { $mybox->Agregar(0,$i+1,$this->array[$i]->getCodigo()); $mybox->Agregar(1,$i+1,$this->array[$i]->getDescripcion()); $mybox->Agregar(2,$i+1,$this->array[$i]->getResumen()); $myimagen1="<img src='img/page_find.png' width='13' height='13' border='0'>"; /*Crea el link de la ventana emergente para realizar la * modificacion del registro requerido*/ $url1="<a href=\"#\" onclick=\"popupWindow('".config_live_site."admincontenido_view.php?clave=".$this->array[$i]>getClave()."&nbsp;','view',640,450,'si');\">$myimagen1</a>"; $mybox->Agregar(3,$i+1,$url1); $myimagen="<img src='img/icon_up.png' width='13' height='13' border='0'>"; echo "<script language='javascript' src='jscript/validar.js'></script>"; /* Crea el link de la ventana emergente para realizar la * modificacion del registro requerido */ $url="<a href=\"#\" onclick=\"popupWindow('".config_live_site."admin_cont_update.php?clave=".$this->array[$i]>getClave()."','updt',500,430,'si');\">$myimagen</a>"; $mybox->Agregar(4,$i+1,$url); $i++; } } $mybox->MostrarHTML(); }} $mypagina = new PaginaWeb('Control Contenido'); $mypagina->MostrarHtml(); ?> Gráfico No.1.27d. admincontrolcontenidos.php 124 1.4.20 Admin_cont_update.php Pagina que presenta los datos que se requiera para poder modificar. Ubicación: admin_cont_update.php <?php /* * Pagina que presenta los datos del registro del * contenido subido por el usuario * es manipulada por el administrador del sitio */ include ("./lib/lib.inc.php"); class PaginaWeb extends PlantillaDialogoHtml{ var $clave; var $ok; var $array=array(); var $oferta; var $valor=0; function PreProceso() { /* * Realiza el preproceso atrapando los datos que son enviados por * el formulario. */ if ((isset($_GET['clave']))||(isset($_POST['clave']))) { if(isset($_GET['clave'])) { $this->clave=$_GET['clave']; } if(isset($_POST['clave'])) { $this->clave=$_POST['clave']; } } if (isset($_POST['opcion'])) { $opcion=$_POST['opcion']; // por 'exit sale de la pantalla actual' if($opcion=='exit') { echo "<script>\n"; echo "window.close();\n"; echo "</script>\n</body>\n</html>"; die; } if(!isset($_POST['oferta'])) { // si no envia oferta guarda los datos que se han enviados $this->oferta='N'; $myproducto=new cls_producto_publicado(); $myproducto->setClave($this->clave); $myproducto->setResumen($_POST["txtarea"]); $myproducto->setEstado($_POST["estado_prod"]); $myproducto->setOferta($this->oferta); $myproducto->setPorcentaje(config_comision); $res=$this->admin_actualizar_cont($myproducto); Gráfico No.1.28a. admin_cont_update.php 125 /* * se genera un scrip en js para * cerrar la pantalla y actualizarla a la vez */ if ($res==1) { echo "<script>\n"; echo "window.opener.location.reload();\n"; echo "window.close();\n"; echo "</script>\n</body>\n</html>"; } } else { // si envia el parametro de oferta realiza los calculos correspondiente // y guarda dichos cambios $this->oferta='A'; $myproducto=new cls_producto_publicado(); $myproducto->setClave($this->clave); $myproducto->setResumen($_POST["txtarea"]); $myproducto->setEstado($_POST["estado_prod"]); if($_POST['txtvalor']<config_comision) { // guarda los datos en el objeto $myproducto->setOferta($this->oferta); $myproducto->setPorcentaje($_POST['txtvalor']); } else { // guarda los datos en el objeto $myproducto->setPorcentaje(config_comision); $myproducto->setOferta('N'); } // actualiza los datos $res=$this->admin_actualizar_cont($myproducto); if ($res==1) { /* * se genera un scrip en js para * cerrar la pantalla y actualizarla a la vez */ echo "<script>\n"; echo "window.opener.location.reload();\n"; echo "window.close();\n"; echo "</script>\n</body>\n</html>"; } } } } function admin_actualizar_cont(cls_producto_publicado $myproducto) { /* * funcion que modifica el producto gracias al objeto cls_transproducto_publicado * que contiene la invocacion para realizar la actualizacion */ $mytransproducto=new cls_transproducto_publicado(); $res=$mytransproducto->admin_modificar($myproducto); return $res; } Gráfico No.1.28b admin_cont_update.php 126 function SeccionCentroMostrarHtml() { /* Funcion que genera el formulario correspondiente a la consulta del contenido publicado * Es la interfaz que presenta el registro guardado en la base.*/ $this->ok=0; $myproducto = new cls_producto_publicado(); $myproducto->setClave($this->clave); $mytransproducto = new cls_transproducto_publicado(); $mytransproducto->consulta_producto($myproducto,$this->ok); if ($this->ok==0) { $mybox = new CuadroHtml('Contenido',230,"3",0); $mybox->Agregar(0,0,"No existen Registro"); $mybox->MostrarHTML(); } / genera el cuadro de presentacion de datos*/ echo "<form name='form' action='".config_live_site."admin_cont_update.php' method=\"POST\" enctype=\"application/x-www-form-urlencoded\" >"; $mybox = new CuadroHtml('Modificar','100%',"3",0); $mybox->Agregar(0,1,"&nbsp;"); $mybox->Agregar(1,0,"<br><font class='layout_small'> Codigo:</font> "); $mybox->Agregar(1,1,"<font class='layout_small'> Titulo:</font>"); $mybox->Agregar(1,2,"<font class='layout_small'> Precio </font>"); $mybox->Agregar(1,3,"<font class='layout_small'> Porcentaje</font>"); $mybox->Agregar(1,4,"<font class='layout_small'> F. Publición:</font>"); $mybox->Agregar(1,5,"<font class='layout_small'> No Descargas:</font>"); $mybox->Agregar(1,6,"<font class='layout_small'> Breve resumen de la Obra:</font>"); $mybox->Agregar(1,7,"<font class='layout_small'> Est. Producto</font>"); $mybox->Agregar(1,8,"<font class='layout_small'> Oferta</font>"); // asigna los valores a los texto $mybox->Agregar(2,0,"<br><font class='layout_small'> ".$myproducto->getCodigo()."</font>"); $mybox->Agregar(2,1,"<font class='layout_small'> ".$myproducto->getDescripcion()."</font>"); $mybox->Agregar(2,2,"<B> <FONT color=red>".config_signo."&nbsp;".number_format($myproducto>getPrecio(), 2, '.', '')."</font>"); $mybox->Agregar(2,3,"<input type='text' id='txtvalor' class='layout_small' name='txtvalor' size='1' value='".$myproducto->getPorcentaje()."'>"); $mybox->Agregar(3,3,"<div id='lblvalor' class='campoError'></>"); $mybox->Agregar(2,4,"<font class='layout_small'> ".$myproducto->getFecha_publicacion()."</font>"); $mybox->Agregar(2,5,"<font class='layout_small'> ".$myproducto->getNumero_descarga()."</font>"); $mybox->Agregar(2,6, "<textarea name='txtarea' id='txtarea' cols='50' rows='15' class='layout_small' >".$myproducto->getResumen()."</textarea>"); $mybox->Agregar(3,6,"<div id='lblarea' class='campoError'></>"); $this->array=array(); $this->ok=0; $i=0; $var_cadena=""; // realiza consulta para la vizualizacion de los contenidos $myestado= new cls_TransEstado_Producto(); $myestado->consulta_todos($this->array,$this->ok); if($this->ok==1) { // genera el combo $var_cadena="<select name='estado_prod' id='estado_prod' class='layout_peq' >"; while ($i<count($this->array)) { if($myproducto->getEstado()==$this->array[$i]->getClave()) {$selection="selected";} else {$selection="";} $var_cadena.="<option value='".$this->array[$i]->getClave()."' $selection>".$this>array[$i]->getDescripcion()."</option>"; $i++; } $var_cadena.="</select>"; } Gráfico No.1.28c. admin_cont_update.php 127 $mybox->Agregar(2,7,$var_cadena); if($myproducto->getOferta()=='A') { $var_check='checked'; } else { $var_check=''; } $mybox->Agregar(2,8,"<input type='checkbox' id='oferta' name='oferta' value='A' $var_check >"); $mybox->Agregar(1,10, "<input type=\"hidden\" id=\"opcion\" name=\"opcion\" size=\"10\" >"); $mybox->Agregar(3,10, "<input type=\"hidden\" id=\"clave\" name=\"clave\" size=\"10\" value=".$this->clave.">"); $bottona="<input type='submit' name='guardar' value='guardar' class='layout_peq' onClick='return valida_carga_archivo_modificado(form)'>"; $bottonb="<input type='submit' name='cancelar' value='cancelar' class='layout_peq' onclick=\"opcion.value='exit'\">"; $mybox->Agregar(1,9, $bottona.$bottonb); $mybox->MostrarHTML();//mostrar el cuadro echo "</form>";// cierra la form } } $mypagina = new PaginaWeb('Contenido');// crea pagina $mypagina->MostrarHtml();//presenta la pagina ?> <script language="javascript" src="jscript/validar.js"></script> <style type="text/css"> <!-.campoError{ font-family: Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; color: #FF0000; } --> </style> Gráfico No.1.28d. admin_cont_update.php 128 1.4.21 Admincontenido_view.php Pagina que presenta los datos que se requiera para poder modificar. Ubicación: admincontenidoview.php <?php /* * Pagina que presenta el contenido del * articulo que se publico */ // añadir librerias. include ("lib/lib.inc.php"); class PaginaWeb extends PlantillaViewHtml { var $MostrarSeccionDerecha=false; function SeccionCentroMostrarHtml() { /*presenta el contenido del documento */ if(!isset($_GET['clave'])) { //header ("location:".$_SERVER['HTTP_REFERER']); return; } $clave=$_GET['clave']; // asignacion // llama el contenido que se encuentra adminview.php echo "<iframe name='iframe_contenido' src='".config_live_site."adminview.php?clave=$clave&' height='100%' width='100%' scrolling='yes' frameborder='0' marginheight='0' marginwidth='0' AllowTransparency></iframe>"; } } $mypagina = new PaginaWeb('Contenido'); $mypagina->MostrarHtml(); ?> Gráfico No.1.29a. admincontenido_view.php 129 1.4.22 Adminview.php Pagina realiza la recuparacion del archivo desde la ruta guardada en la base Ubicación: admincontenidoview.php <?php /* * Pagina que genera el contenido del archivo * pdf */ include ("./lib/lib.inc.php"); $clave=$_GET['clave']; // crea una conexion $link=new DB_mysql(); // declaracion de variables $var_direccion; $var_len; /* * genera la sentecia sql que recupera los datos guardado * en la base de datos. */ $ssql=" select wpp_direccion, wpp_codigo, wpp_tipo_archivo from tbpv_producto_publicado where wpp_clave=".$clave; $rs = mysql_query($ssql); if($rs) { if(mysql_num_rows($rs)>0) { /* * Con estas lineas muestra los pdf en la ruta que dicho documento se encuentra. */ $row = mysql_fetch_array($rs, MYSQL_ASSOC);// asigna la consulta a una estructura $var_direccion=$row['wpp_direccion'].$row['wpp_codigo'].config_extension; $var_len=filesize($var_direccion);//calcula el tamaño del documento header("Cache-Control: no-store, no-cache, must-revalidate"); // no reserva cache header("Pragma: no-cache"); //no reserva cache header('Content-Type: '.$row['wpp_tipo_archivo']);// decide el tipo de documento header("Content-Length: $var_len");// reserva el tamaño header('Content-disposition: inline; filename="'.$var_direccion.'"');// dispone del documento readfile($var_direccion);// lee el documeno } } else { die('Could not connect:'.mysql_error()); } $link->__sleep();// cierra la conexion ?> Gráfico No.1.30ª. adminview.php 130 1.4.23 Cargar_archivo.php Present a el formula para guardar los contenidos que los suscriptores necesites subir. Ubicación: cargar_archivo.php <?php /* * pagina que muestra la carga de * los archivos, Se realizan las respectivas validaciones * que se requiere para su respectiva publicacion */ include ("./lib/lib.inc.php"); class PaginaWeb extends PlantillaHtml { /* * Declaracion de varibles que requiere la clase */ var $usuario; var $array; var $ok; var $estado; var $clave; var $mensaje; var $valor; var $titulo; var $last_name; function PreProceso() { ///para accesar a cargar arcjivos, debemos ver si el/// ///usuario esta validado en el sistema, de lo////////// ///contratio lo enviamos a login.hp/////////////////// if(!isset($_SESSION['usuario'])) { header('location: '.config_live_site.'login.php'); exit(); } $this->usuario=$_SESSION['usuario']; $mytransaldo= new cls_transtarifa_suscriptor(); $saldo = $mytransaldo->validar_saldo($this->usuario); if($saldo==0) { header('location:'.config_live_site.'orden_suscripcion.php'); exit(); } $this->usuario=$_SESSION['usuario']; if(!empty($_POST)) { if(isset($_POST['txttitulo'])) { $this->titulo=$_POST['txttitulo'];} Gráfico No.1.31a. cargar_archivo.php 131 else { $this->titulo=""; } if(isset($_POST['txtvalor'])) { $this->valor=$_POST['txtvalor'];} else { $this->valor=""; } if(isset($_POST['txtarea'])) { $this->last_name=$_POST['txtarea']; } else { $this->last_name=""; } if ($_POST["ok"] == "carga") { /* * En esta parte se recupera la informacion del * archivo para ir agregandola a la clase del producto. * para luego grabarla si pasa los filtros correspondiente */ ini_set('max_execution_time','300'); //Maximum execution time of each script, in seconds ini_set('max_input_time', '60'); // Maximum amount of time each script may spend parsing request data ini_set('memory_limit','20'); //Maximum amount of memory a script may consume (16MB) ini_set('post_max_size','8M'); //Maximum size of POST data that PHP will accept. ini_set('file_uploads', 'On'); //Whether to allow HTTP file uploads. ini_set('upload_max_filesize','20M'); //Maximum allowed size for uploaded files. ini_set('register_globals','On'); /* You should do your best to write your scripts so that they do not require register_globals to be on; Using form variables as globals can easily lead to possible security problems, if the code is not very well thought of.*/ ini_set('register_long_arrays','On'); /*Whether or not to register the old-style input arrays, HTTP_GET_VARS and friends. If you're not using them, it's recommended to turn them off, for performance reasons.*/ /* * asignacion de los atributos de archivo a variables */ $archivo = $_FILES["archivo"]['name'];// nombre $archivo1 = $_FILES["resumen"]['name'];// nombre resumen $tipo = $_FILES["archivo"]['type'];// tipo archivo $tipo1 = $_FILES["resumen"]['type'];//tipo de resumen $tamanio = $_FILES["archivo"]['size'];// tamaño de archivo $tamanio1 = $_FILES["resumen"]['size'];// tamaño de resumen $tmptipo = substr($tipo,-3); // recupera extencion $tmptipo1 = substr($tipo1,-3); if($archivo !== "")// verifica si llega el archivo { if($tmptipo == config_extensions)// verifica l aextencion { if(($tmptipo1 == config_extensions) or ($tmptipo1== "")) // verifica la extencion de l resumen Gráfico No.1.31b. cargar_archivo.php 132 if(($tmptipo1 == config_extensions) or ($tmptipo1== "")) // verifica la extencion de l resumen { if($tamanio<config_maximo_archivo)// tamaño maximo de archivo { if(($tamanio1<config_maximo_resumen)&&($tamanio1<$tamanio))// tamaño minimo de resumen { $var_cadena=$_POST['categoria']; $mycategoria=new cls_categoria();// recuper el tipo de categoria $mycategoria>setCodigo($var_cadena);//codigo de categoria $mytranscategoria= new cls_transcategoria();//crea cls_transcategoria $mytranscategoria->consulta_u($mycategoria,$this->ok); $var_destino=config_ruta_car."/".$mycategoria->getDescripcion()."/archivo/"; $destino=$var_destino.$archivo; // archivo de destino $var_destino1=config_ruta_car."/".$mycategoria->getDescripcion()."/resumen/"; $destino1=$var_destino1.$archivo1;// destino de resumen if (copy($_FILES["archivo"]['tmp_name'],$destino))// copia a la carpeta destino { if(copy ($_FILES["resumen"]['tmp_name'],$destino1))//copia a carpeta destino de resumen { } $txttitulo =$_POST['txttitulo'];//titulo $txtvalor =$_POST['txtvalor'];// valor $txtarea =$_POST['txtarea'];// comentario $myproducto=new cls_producto_publicado();// crea un objeto cls_producto_publicado $myproducto->setDescripcion($txttitulo);//descripcion $myproducto->setPrecio($txtvalor);//valor $myproducto->setCategoria($var_cadena);//categoria $myproducto->setFecha_publicacion('CURDATE()');//fecha $myproducto->setDireccion($var_destino);// ruta de direccion $myproducto->setDireccion_resumen($var_destino1); $myproducto->setNumero_descarga(0); $myproducto->setPorcentaje(20); $myproducto->setPrecio_publico(($txtvalor*config_comision/100) + $txtvalor); Gráfico No.1.31c. cargar_archivo.php 133 ///////////////PUBLICACION AUTOMATICA SI EL ARCHIVO///// ///////////////TIENE UN TAMAÑO MENOR A 2MB////////////// ////////////////////////1 pendiente//////////////////// ////////////////////////2 publicado//////////////////// if($tamanio<config_tope_maximo) { $myproducto->setEstado(2); } else { $myproducto->setEstado(1); } $myproducto->setAlias($this->usuario); $myproducto->setTipo_motivo(1); $myproducto->setResumen($txtarea); $myproducto->setArchivo($archivo); $myproducto->setArchivo_resumen($archivo1); $myproducto->setTamanio($tamanio); $myproducto->setTamanio1($tamanio1); $myproducto->setTipo_archivo($tipo); $myproducto->setTipo_resumen($tipo1); $myproducto->setNombre_archivo($archivo); $myproducto->setNombre_resumen($archivo1); $mytranscontenido= new cls_transproducto_publicado(); // validacion del contenido $saldo = $mytranscontenido->validar_producto($this->usuario, $archivo); $this->estado=0; if($saldo==0) { $mytranspublicado= new cls_transproducto_publicado(); // guarda la informacion del contenido $this->estado=$mytranspublicado->insertar_t($myproducto); } if($this->estado==1) { // direcciona al comentario header('location:'.config_live_site.'comentario_suscripcion.php?mens=2&clave='.$myproducto->getClave()); exit(); } if($this->estado==0) { // direcciona al comentario header('location:'.config_live_site.'comentario_suscripcion.php?mens=3'); exit(); } } } else //El Resumen debe ser menor a 1MG $this->mensaje="** El Resumen debe ser menor a 1MG"; } else //El Archivo de ser un archivo menor a 4MG $this->mensaje="** El Archivo de ser un archivo menor a 4MG "; } else //El Resumen debe ser un archivo PDF $this->mensaje="** El Resumen debe ser un archivo PDF"; } else Gráfico No.1.31d. cargar_archivo.php 134 // El Archivo debe ser un archivo PDF $this->mensaje="** El Archivo debe ser un archivo PDF"; } else { // El Archivo a subir debe ser obligatorio" $this->mensaje="** El Archivo a subir debe ser obligatorio"."<br>"."El Resumen es opcional"; } } } } function SeccionCentroMostrarHtml() { /* * Genera el formulario correspondiente que muestra */ echo "<form name='form1' method='POST' action='".config_live_site."cargar_archivos.php' enctype='multipart/form-data' >"; $mybox = new CuadroHtml('AQUIDESCARGA INFORMA',450,3); $var_cadena=""; $var_cadena.="<TABLE cellSpacing=1 cellPadding=1 width='400' border=0>"; $var_cadena.="<TBODY>"; $var_cadena.="<TD class=linksec height=20> <FONT color=black> ·: Que usted pueder subir contenidos de hasta 4MB </font></TD>"; $var_cadena.="</TR><tr>"; $var_cadena.="<TD class=linksec height=20><FONT color=black>·: Puedes compartir contenidos con todo el mundo</font></TD></tr><tr><td>"; $var_cadena.="<TABLE cellSpacing=0 cellPadding=0 width='100%' border=0><TBODY>"; $var_cadena.="<TR class=menu_option onmouseover=\"this.className='menu_option_over'\" style=\"CURSOR: pointer; PADDING-TOP: 2px\" onclick=\"document.location='".config_live_site."welcome.php'\" onmouseout=\"this.className='menu_option'\">"; $var_cadena.="<TD class=linksec height=20></TD><TD class=linksec height=20>.: Autoridad Controladora de Nuestro Portal</TD></tr></TBODY></TABLE>"; $var_cadena.=" </td></tr></TBODY></TABLE>"; $mybox->Agregar(9,1,config_espacio); $mybox->Agregar(10,1,$var_cadena); $mybox->Agregar(10,2,config_espacio); $mybox->MostrarHTML(); $mybox = new CuadroHtml('SUBIR ARCHIVOS',450,3); $mybox->Agregar(0,1,config_espacio); $mybox->Agregar(0,0,config_espacio); $mybox->Agregar(1,1,"Clasificacion:"); $mybox->Agregar(1,3,"Titulo:"); $mybox->Agregar(1,5,"Valor:"); $mybox->Agregar(1,7,"Breve resumen de la Obra:"); $mybox->Agregar(1,9,"Adjunta Archivo:"); $mybox->Agregar(1,11,"Adjunta Resumen:"); $this->array=array(); $this->ok=0; $i=0; // consulta categoria $mytranscategoria= new cls_transcategoria(); $mytranscategoria->consulta_categoria($this->array,$this->ok); if($this->ok==1) { // forma combo $var_cadena="<select name='categoria' id='categoria' class='layout_peq' >"; while ($i<count($this->array)) { $var_cadena.="<option value='".$this->array[$i]->getCodigo()."'>".$this->array[$i]>getDescripcion()."</option>"; $i++; } $var_cadena.="</select>"; } Gráfico No.1.31e. cargar_archivo.php 135 $mybox->Agregar(2,1,$var_cadena); $mybox->Agregar(2,3,"<input type='text' id='txttitulo' name='txttitulo' size='22' class='layout_small' maxlength='45' value='".$this->titulo."' >"); $mybox->Agregar(3,3,"<div id=\"lbltitulo\" class=\"campoError\"></>"); $mybox->Agregar(2,5,"<input type='text' id='txtvalor' name='txtvalor' size=5 maxlength='5' class='layout_small' value='".$this->valor."'>"); $mybox->Agregar(3,5,"<div id=\"lblvalor\" class=\"campoError\"></>"); $mybox->Agregar(2,7, "<textarea cols='40' rows='15' name='txtarea' id='txtarea' class='layout_small' >".$this>last_name."</textarea>"); $mybox->Agregar(3,7,"<div id=\"lblarea\" class=\"campoError\"></>"); $mybox->Agregar(2,9, "<input type='file' size=22 name='archivo' class='layout_small' id='txtarchivo'>"); $mybox->Agregar(3,9,"<div id=\"lblarchivo\" class=\"campoError\"></>"); $mybox->Agregar(2,11, "<input type='file' size=22 name='resumen' class='layout_small' id='resumen'>"); $mybox->Agregar(5,12, "<input type='hidden' name='ok' value='carga'>"); $mybox->Agregar(2,13, "<input type='submit' name='enviar' value='subir' onClick='return valida_carga_archivo(form1)'>"); $mybox->Agregar(2,14,config_espacio); $mybox->Agregar(2,15,$this->mensaje); $mybox->Agregar(2,17,config_espacio); $mybox->MostrarHTML(); echo "</form>";// fin de forma $this->MostrarError(); }///fin SeccionCentroMostrarHtml }//class PaginaWeb extends PlantillaHtml $MiPagina = new PaginaWeb('Upload Pdf'); $MiPagina->MostrarHtml(); // llama los JS que maneja nuestro proyecto ?> <script language="javascript" src="jscript/validar.js"></script> <style type="text/css"> <!-.campoError{ font-family: Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; color: #FF0000; } --> </style> Gráfico No.1.31f. cargar_archivo.php 37 CAPITULO 2 Manual de usuario Antes de empezar Se recomienda leer primero este apartado del manual, con respecto a la instalación y configuración del sistema. Si se requieren más detalles de funcionamiento, remitase al manual técnico aquí proporcionado. 137 2.1 Instalación del servidor Web para Linux. 2.1.1 Pasos para la instalación de Xampp en Linux. Lo primero es conseguir el paquete xampp-linux-1.6.3a.tar.tar, una vez que hemos conseguido el paquete, debemos de ubicarlo en el directorio /root/install, luego de ello procedemos a descomprimirlos. Para realizar una correcta instalación de Xampp debemos de digitar los siguientes comandos en la consola de Linux. Con este comando nos cambiamos al directorio local: [root@server ~]# cd /usr/local Luego descomprimimos el archivo con el siguiente comando: [root@server ~]# tar xvfz /root/install/xampp-linux-1.6.3a.tar.tar -C /opt Luego de ello, Xampp debería estar instalado en el directorio /opt/lampp Ahora iniciamos el servidor web de la siguiente manera: [root@server ~]# /opt/lampp/lampp start Una vez que hemos iniciado el servicio de Xampp, en la consola de Linux debe de aparecer lo siguiente: 138 XAMPP: SELinux is activated. Making XAMPP fit SELinux... Starting XAMPP for Linux 1.6.3a... XAMPP: Starting Apache with SSL (and PHP5)... XAMPP: Starting MySQL... XAMPP: Starting ProFTPD... XAMPP for Linux started. Esto indica que Xampp fue instalado con éxito y sus servicios se están ejecutando correctamente. Para continuar y saber si hemos instalado correctamente abrimos una ventana del navegador y en la barra de direcciones digitamos la siguiente ruta: http://127.0.0.1/ En ese momento se debe visualizar la siguiente pantalla. Gráfico No.2.1. Instalación de Xampp 139 2.1.2 Instalación de MySQL Tools for 5.0 para Linux. En el desarrollo de nuestro proyecto hemos utilizado la (GUI) interfaz grafica de usuario denominada MySQL Tools, que es la que nos permite visualizar y manipular la base de datos de nuestro proyecto. Dicha herramienta contiene varias opciones en la cual podemos hacer consultas, administración de la base web. Para instalar este programa en Linux, debemos de ubicar el paquete mysql-gui-tools-5.0r12-linux-i386.tar.tar en el directorio /root/install, luego de ello procedemos a descomprimirlos. Con este comando nos cambiamos al directorio local: [root@server ~]# cd /usr/local Luego descomprimimos el archivo con el siguiente comando: [root@server ~]# tar xvfz /root/install/ mysql-gui-tools-5.0r12-linuxi386.tar.tar -C /opt 2.1.3 Instalación de la Base de Datos “Web” Para instalar la base de datos se debe de seguir los siguientes pasos: Seleccionar la opción de PhpMyAdmin que se encuentra en el menú de herramientas del Xampp. 140 Gráfico No.2.2. Interfaz de PhpMyAdmin. Se debe de escoger la opcion de importar base de datos, y seleccionar el archivo para restaurar la base de datos. Gráfico No.2.3. Importación de la base Web. 141 Después de esto, debe de aparecer en el listado de base de datos, el nombre de nuestra base de datos, con sus respectivas tablas. Gráfico No.2.4. Tablas de la base Web 2.1.4 Creación del usuario para conectarse a la base de datos de aquidescarga.com Para crear un nuevo usuario para la base de datos “web”, se debe de seleccionar la opcion de “Agregar un nuevo usuario”, que se encuentra dentro del menú de PhpMyAdmin en el Xampp. 142 Gráfico No.2.5. Creación de usuario en la base Luego de esto, se visualizará una pantalla en la cual vamos a poder ingresar el nombre del usuario, nombre del servidor y contraseña de la base de datos. Gráfico No.2.6. Privilegios para el usuario en la base “Web”. 143 En la misma página, nos muestra los privilegios que va a tener dicho usuario, así como también el acceso a la base de datos a la cual va a tener acceso el usuario que hemos creado. 2.1.5 Instalación del portal aquidescarga.com dentro de nuestro servidor Web en Linux. Para proceder a la instalación del portal en nuestro servidor web, se debe de copiar los archivos que se encuentran dentro de la carpeta “aquidescarga” en el directorio llamado /opt/lampp/htdocs/ y de esta manera queda instalado el portal dentro del servidor web. Gráfico No.2.7 Pantalla inicial de Aquidescarga 144 2.2 Instalación del servidor Web para Windows. 2.1.1 Pasos para la instalación de EasyPHP. Para la instalación del servidor web en Windows, hemos utilizado una herramienta similar al Xampp que se utilizó en Linux, dicha programa permite instalar de una manera práctica los 3 servicios (Apache, Php y Mysql) necesarios para nuestro servidor web. Caracteristicas del EasyPHP. Plataforma: Win/95/98/ME/2000/NT/XP Idioma: Español Licencia: Freeware Tamaño: 7.8 MB Web: http://www.easyphp.org/ El archivo que hemos utlizado para la instalación de nuestro servidor web es EasyPHP-2.0b1-setup.exe que lo hemos descargado de la url anteriormente mencionada, al momento de la instalación del programa para el desarrollo del proyecto, éste se encontraba en la versión 2.0. Empezaremos por instalar EasyPHP, que incluye el servidor Web Apache, La base de datos MySQL, y el lenguaje PHP. Haz doble clic sobre el icono del archivo de EasyPHP-2.0b1-setup.exe 145 Gráfico No.2.8. Selección de idioma para EasyPHP. Después de hacer doble clic, y de una pequeña ventana de confirmación, se verá esta imagen: Gráfico No.2.9. Instalación de EasyPHP (Paso 2) 146 Haz clic en el botón "siguiente" para ver la pantalla de la licencia. Luego, el programa de instalación de EasyPhp mostrará la pantalla que nos permitirá aceptar su licencia de difusión: Gráfico No.2.10. Instalación de EasyPHP (Paso 2) Marca "Acepto el acuerdo" y haz clic sobre el botón 'Next' para continuar. La pantalla siguiente mostrará algunas informaciones actualizaciones sobre versiones anteriores de EasyPHP. sobre 147 Gráfico No.2.11. Instalación de EasyPHP (Paso 3) La ventana de diálogo siguiente permite definir el directorio dónde se instalarán los componentes de EasyPHP. Gráfico No.2.12. Instalación de EasyPHP (Paso 4) 148 El desplazamiento por defecto es la mejor opción, sólo hace falta en este caso hacer clic sobre el botón 'Siguiente' para continuar. La ventana siguiente permite definir dónde se pondrán los enlaces directos al programa. Gráfico No.2.13. Instalación de EasyPHP (Paso 5) En este caso también, el desplazamiento por defecto que sugiere la instalación es la mejor opción, sólo es necesario hacer clic en el botón 'Siguiente' para continuar. El programa de instalación mostrará enseguida una pantalla de recapitulación de las opciones anteriores: 149 Gráfico No.2.14. Instalación de EasyPHP (Paso 6) Haz clic en 'Instalar' para iniciar la instalación del programa. Gráfico No.2.15. Instalación de EasyPHP (Paso 7) Después de algunos instantes necesarios para copiar los archivos de EasyPhp, veremos una lista de los cambios importantes realizados con la nueva versión de PHP: 150 Gráfico No.2.16. Instalación de EasyPHP (Paso 8) La pantalla del grafico No.2.16 muestra las configuraciones que va a tener el EasyPHP en el momento de la instalación. Gráfico No.2.17. Instalación de EasyPHP (Paso 9) 151 2.1.2 Uso de EasyPHP. En el menú Inicio, Programas tendrá una nueva entrada para EasyPhp: Gráfico No.2.18. Menú Inicio, Programas con EasyPHP Haciendo clic sobre la entrada 'EasyPhp', iniciarás el servidor Web. Sabrás que el servidor Web funciona porque estará situado en la barra de herramientas: 152 Gráfico No.2.19. Icono de EasyPHP en la barra de tareas. El icono de EasyPhp se muestra con un pequeño punto rojo. Esto indica que todo va bien. Un clic con el botón derecho del ratón muestra un menú contextual: Gráfico No.2.20. Menú contextual de EasyPHP en la barra de tareas. Las entradas 'Salir', 'Detener', 'Reiniciar' permiten parar o reiniciar el servidor Web. Seleccionando la opción 'configuración', permite ver los parámetros de la aplicación: 153 Gráfico No.2.21. Configuracion de EasyPHP. Tienes la posibilidad de escoger la opción 'Iniciar EasyPHP al iniciar Windows' (o 'Iniciar los servidores sólo como servicios' si se está bajo Windows NT). Esto hará que el programa se inicie automáticamente cuando se encienda el ordenador, de forma que no tendrás que iniciar el programa manualmente. 2.1.3 Instalación de MySQL Tools for 5.0 para Windows. El programa mysql-gui-tools-5.0-r12-win32.exe fue el que se escogió para instalarlo en el servidor web de nuestro portal para el desarrollo de nuestro proyecto, es el que nos permite utilizar una interfaz gráfica agradable para manipular los registros de la base de datos. Al ejecutar el programa de instalación, se visualizará la pantalla: 154 Gráfico No.2.22. Instalación de MySQL Tools (Paso 1). Procedemos a presionar el botón “Next >”, luego de ello se mostrara lo siguiente: Gráfico No.2.23. Instalación de MySQL Tools (Paso 2). 155 En esta pantalla debemos de aceptar la licencia del producto y presionar “Next >”. Gráfico No.2.24. Instalación de MySQL Tools (Paso 3). Luego de ello se mostrará la pantalla en la cual nos va a indicar el directorio en donde se va a ubicar la aplicación en nuestro servidor web. Gráfico No.2.25. Instalación de MySQL Tools (Paso 4). 156 Después seleccionamos la opción “Complete”, que viene por defecto. Gráfico No.2.26. Instalación de MySQL Tools (Paso 5). Luego de ello se visualizará la pantalla en la cual nos va a indicar que se va a iniciar la instalación Gráfico No.2.27. Instalación de MySQL Tools (Paso 6). 157 En ese momento se van a presentar las pantallas de información del producto instalado. Gráfico No.2.28. Instalación de MySQL Tools (Paso 7). 2.1.4 Instalación de la Base de Datos de Aquidescarga Para instalar la base de datos debemos de seleccionar la opción de “Administración” del menú contextual que tiene EasyPHP, luego de ello se selecciona la opción “Mysql Gestion”, en se momento se mostrará una pantalla en la cual debemos de seleccionar la opción llamada “SQL”, y en esa pantalla se debe de importar el script de la base de datos para que sea creada en el servidor web. 158 2.1.5 Creación del usuario para conectarse a la base de datos de aquidescarga Los pasos para crear el nombre de usuario que se va a conectar a la base de datos web, son los mismos que se enumeraron anteriormente. Puesto que esto se realiza mediante la opción de PhpMyAdmin que se encuentra en el EasyPHP. Se puede acceder a esta opción mediante el menú contextual visto anteriormente, seleccionando primero la opción “Administración”, en ese momento se abre una ventana del navegador y dentro de ella se debe escoger la opción “Mysql Gestion” que se encuentra junto a la etiqueta PhpMyAdmin 2.9.1.1. Luego de ello se va a visualizar una ventana, de la cual seleccionaremos la opción “Privilegios”, y dentro de ella se seguirán los pasos para crear al usuario de la base de datos. 2.1.6 Instalación del portal Web en Windows. Una vez que se siguieron los pasos anteriores para instalar el EasyPHP, realizaremos la instalación del portal en el servidor, copiando los archivos que se encuentran dentro de la carpeta “aquidescarga” en la ruta “C:\Archivos de programa\EasyPHP 2.0b1\www”, y de esta manera nuestro proyecto ya se encuentra ubicado en nuestro servidor Web. 159 2.1.7 Obtención del dominio para Aquidescarga.com Para obtener el nombre de dominio aquidescarga.com para nuestro portal, tuvimos que ingresar a la página http://www.cityofdomains.com/ con el fin de registrar nuestro nombre de dominio. De esta manera, una vez que ha sido verificado nuestro dominio como libre, entonces procedemos a registrarlo. Gráfico No.2.29. Obtención del dominio (Paso 1). En ese momento se visualizara una pantalla en la cual vamos a elegir el tipo de extensión que va a tener el portal, ya sea .com .net .org, etc, luego presionamos el botón de “Continue”. 160 Gráfico No.2.30. Obtención del dominio (Paso 2). Luego de ello continuamos con el ingreso de los datos de nuestro portal, llenando los respectivos casilleros en el formulario. Gráfico No.2.31. Obtención del dominio (Paso 3). 161 En la pantalla que se muestra a continuación se deben de ingresar los datos personales, los cuales serán verificados posteriormente por cityofdomains.com. Una vez que los datos han sido ingresados en la página, se debe continuar con el proceso para registrar nuestro nombre de dominio. Gráfico No.2.32. Obtención del dominio (Paso 4). Luego de haber ingresado nuestros datos para el dominio de aquidescarga.com, procedemos a seleccionar el tipo de pago del servicio que ofrece cityofdomains.com, y es en esa pantalla la que nos mostrará un subtotal del valor que vamos a pagar por el nombre de dominio que hemos obtenido. 162 Gráfico No.2.33. Obtención del dominio (Paso 5). Una vez que hayamos digitados los datos necesarios para el portal, debemos de continuar con el proceso para realizar la transacción. Y es aquí donde seleccionamos la forma de pago para obtener nuestro nombre de dominio, que en nuestro caso va a ser mediante la tarjeta de crédito. Luego de ingresar los datos en esta pantalla, seguimos en el proceso y veremos a continuación una pantalla en la cual se nos va a solicitar la información correspondiente a la tarjeta de crédito con la cual queremos realizar el pago. 163 Gráfico No.2.34. Obtención del dominio (Paso 6). Y como ultimo paso, se nos va a presentar pantalla final del proceso. Gráfico No.2.35. Obtención del dominio (Paso 7). 164 2.1.8 Obtención del hosting para Aquidescarga.com Para poder poner nuestro proyecto en un hosting, tuvimos que seguir los siguientes pasos: Elegimos la siguiente dirección http://www.westnic.net/web-hosting/ para poder poner nuestro portal en la red. Luego de ello seleccionamos el botón “Order now”. Gráfico No.2.36. Obtención del hosting (Paso 1). Luego de haber presionado el botón en “Order now”, se visualiza una pantalla en la cual seleccionamos la opción de dominio, que en nuestro caso va a ser la segunda alternativa de la pantalla y en el 165 casillero escribimos nuestro nombre de dominio aquidescarga.com, y damos clic en el botón “Next >>” Gráfico No.2.37. Obtención del hosting (Paso 2). Luego de ello nos muestra una pantalla y dentro de la cual debemos de seleccionar el tipo de paquete para el hosting, en nuestro caso escogemos el paquete personal y seleccionamos dentro de un listado de opciones, el nombre de dominio para nuestro portal, que en nuestro caso es: aquidescarga.com 166 Gráfico No.2.38. Obtención del hosting (Paso 3). Una vez que hemos ingresados los datos anteriores, debemos de presionar el botón “Continue >>”, de esta manera se presentará una pantalla en la cual vamos a seleccionar una de las opciones que se presentan en un listado, en nuestro caso escogemos la opción de 12 meses. Luego presionamos el botón “Calculate Totals”, y se mostrará una descripción del paquete que hemos comprado, el cual incluye el valor total y el tiempo por el cual se ha hecho la transacción, además en la parte inferior seleccionamos la opción “I am a new customer”, en el caso de serlo. Después presionamos el botón “Continue >>”. 167 Gráfico No.2.39. Obtención del hosting (Paso 4). Gráfico No.2.40. Obtención del hosting (Paso 4). 168 En la ventana siguiente tenemos que llenar un formulario en el cual ingresamos los datos personales (Nombre, dirección, pais, etc), la información necesaria para que se puedan contactar con nosotros (Telefono, email, etc) y las opciones de pago del servicio, que en nuestro caso va a ser la tarjeta de crédito. Gráfico No.2.41. Obtención del hosting (Paso 5). Luego de haber llenado los datos del formulario, procedemos a presionar el botón “Verify my Order >>” para completar la transacción financiera del servicio. 169 Gráfico No.2.42. Obtención del hosting (Paso 6). 170 2.3 Funcionalidad del proyecto aquidescarga 2.3.1 Pagina de inicio del portal. La pantalla que se muestra en la siguiente figura, es la página principal de nuestro portal, en ella se puede observar el lugar destinado para el inicio de sesión de los usuarios, que se ubica en la parte central al lado izquierdo de la pantalla. Aquí mostraremos la secuencia que el usuario debe seguir para publicar y descargar archivos dentro de nuestro portal Para iniciar el proceso, debe dar clic en el link que dice “Registrate AQUI”. 171 2.3.2 Pantalla de registro de usuarios. En esta pantalla, el usuario va a digitar sus datos en un formulario, una vez que hayan sido ingresados, se procede a dar clic en el boton guardar. 172 En ese momento se presentara una pantalla en la cual nos indica que los datos han sido grabados con éxito. El siguinte paso es activar la cuenta del usuario, para esto, el usuario debe de revisar el correo electronico que nos proporciono al momento del registro y dar clic en el link de activacion que va incluido en el mensaje del correo. Cabe destacar que la cuenta de correo que el usuario escribe en el formulario de registro debe de ser una cuenta válida, puesto que es a ella, donde vamos a enviar la informacion correspondiente al usuario que se ha registrado, asi como tanbién el respectivo link que sirve para la activacion de la cuenta. Al hacer esto, el registro del usuario queda activado para poder ingresar en nuestro portal y de esta manera él pueda acceder dentro del mismo. 173 2.3.3 Pantalla Mi cuenta. Una vez que el usuario ya ha activado su cuenta, él puede ingresar al portal con su respectivo nombre de usuario y contraseña, ésta es la pantalla que se muestra para el ingreso al portal. 174 2.3.4 Pantalla Pago de suscripción. Para que el usuario pueda publicar sus contenidos, debe de pagar un dinero por concepto de suscripción en un determinado tiempo. Aquí se muestra el listado de opciones de las cuales el usuario puede escoger. 175 2.3.5 Pantalla de Simulador de Pago. En esta parte, el usuario debe de ingresar los datos correspondientes a la tarjeta de crédito para poder realizar la transacción y luego pueda publicar sus contenidos en pdf en nuestro portal. 176 2.3.6 Pantalla de Subir archivos. Esta pantalla le permite al usuario suscrito en nuestro portal, subir archivos en formato pdf para que estos sean publicados y posteriormente descargados por otros usuarios. Aquí puede ubicar el archivo en la categoría que el usuario desee, asi como tamicen escribir una descripción, además de subir otro archivo de tipo resumen, tambien en formato pdf. 177 2.3.7 Pantalla de Confirmación. Esta pantalla muestra al usuario un mensaje que indica que los archivos que esta subiendo a nuestro portal, se han subido con éxito. Luego de ello, y dependiendo del tamaño del archivo, se procede a publicar dicho archivo o en su defecto pasa a un estado pendiente a la espera de la aprobación por parte del administrador del portal. 178 2.3.8 Pantalla para realizar la compra. Una vez que ha seleccionado el o los archivos para descargar, Estos se presentaran en un listado con sus respectivos valores y en la parte inferior de dicho listado se mostrará el valor total por el cual se va a realizar la transacción financiera. 179 Para continuar con el proceso de compra, se debe de dar clic en la opción “Realizar pago”. Una vez alli, debe de dar clic en la opción “Hacer una orden”, para el respectivo pago del recurso que se desea descargar. Después de haber seguido los pasos anteriormente mencionados, se procederá a dar clic en la opción “Hacer una orden”, en ese momento se mostrará una pantalla en la cual el usuario debe de ingresar los datos correspondientes a la forma de pago, que en nuestro caso va a ser la tarjeta de crédito, con la cual se va a proceder a pagar el valor respectivo por el o los contenidos que el usuario haya elegido para descargar. Luego del respectivo pago, el usuario podrá descargar dichos archivos, dicho usuario tendra hasta un maximo de 3 ocasiones para proceder a descargarlos, ya sea en ese mismo momento o en un momento posterior.