Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Construyendo tu Startup: Solicitando cambios de agenda

by
Read Time:14 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Advanced Scheduling Commands
Building Your Startup: Meetings With Multiple Participants

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Este tutorial es parte de la serie Envato Tuts+ Construyendo tu startup. En esta serie, te guiare para lanzando una startup desde el concepto de la realidad usando mi app Meeting Planner como un ejemplo de vida real. Cada paso del camino, publicare el codigo Meeting Planner como un open-source ejemplo con el cual puedes aprender También me ocuparé de asuntos relacionados con el inicio de negocios a medida que surjan.

Cambiando tus planes de reunión

Como el testeo de Meeting Planner alpha comienza, la clara característica faltante fue la inhabilidad de cambiar una reunión después de que fue programada No es un problema facil. ¿Esta bien solo cambiar una reunion sin el consentimiento del participante? ¿O deberia preguntar? ¿O hacer cualquiera?, dependiendo del rol que tengas organizando la reunión. ¿Que pasaría si solo quieres preguntar si esta bien reunirnos 15 mas tarde? —Debería ser facil, ¿no?

Resolviendo todo esto, requiere reflejar todos los aspectos sociales de cambiar una reunion

Con el tiempo, me di cuenta que la habilidad de cambiar una reunion facilmente que han programado podria hacer o quebrar la  marca "Meeting Planner"

En nuestro ultimo episodio en programación avanzada, implemente Hacer Cambios, que permite un organizador o participante con permisos para esencialmente re programar una reunión sin pedir permiso En el tutorial de hoy, los guiare por todo el proceso de construir toda la infraestructura de "Pedir cambios" Requiere que los participantes pidan cambios y los otros puedan aceptar o declinar, afectando los detalles del calendario de la reunión final

Mientras lees, espero puedas intentar la característica "Pide un cambio" en el sitio y compartas sus pensamientos y opiniones en los comentarios de abajo. Participio en las discusiones, pero puedes contactarme en @reifman en twitter. Estoy siempre abierto a ideas de caracteristicas nuevas para Meeting Planner como tambien sugerencias para futuras episodios de la serie.

Como recordatorio, todo el codigo para Meeting Planner es previsto como codigo abierto y escrito en la Yii2 Framework para PHP. Si te gustaria aprender mas de Yii2, visita mi serie paralela Programando con Yii2.

Empecemos.

Construyendo "Pedir cambios"

Una montaña alta por escalar

Aparte de la vista de las características de reunión y programación, "Pedir cambios" requiere mas tiempo y nuevo código que cualquier otra característica en este proyecto.

Como mencione en el anterior episodio, programar todo con seguridad básica toma un poco mas tiempo que rápido prototipo, pero diseñar y construir esta característica también toque mucho las otras áreas de la plataforma:

  • Diseñar con la ingeniería social de solicitar y hacer cambios de horario.
  • Mantener el UX para las solicitudes de cambio simple, ayudando a la gente a solicitar y responder a las solicitudes de cambio sin enturbiar la interfaz.
  • Manejar solicitudes para reuniones de 1:1 sería fácil, pero la programacion de la nueva característica de múltiples participantes requeriría una infraestructura mucho más sofisticada.
  • Manejo de las respuestas a las solicitudes con varios participantes por delante.
  • Notificaciones por correo electrónico de solicitudes nuevas y retiradas, respuestas aceptadas y rechazadas.
  • Actualizar la confirmación de la reunión y los detalles del calendario cuando las solicitudes aceptadas afectan a la reunion programada.

Por lo tanto, aunque esto no es una imagen perfecta de los cambios sólo para esta característica, aquí hay capturas de pantalla de la eventual extracción de código de servidor de producción.

Aqui estan los cambios al codigo existente:

Build Your Startup Request Scheduling Changes - Git Pull File ChangesBuild Your Startup Request Scheduling Changes - Git Pull File ChangesBuild Your Startup Request Scheduling Changes - Git Pull File Changes

Y aqui estan los nuevos archivos:

Build Your Startup Request Scheduling Changes - Git Pull New FilesBuild Your Startup Request Scheduling Changes - Git Pull New FilesBuild Your Startup Request Scheduling Changes - Git Pull New Files

Hubo mucho codigo nuevo en esta caracteristica.

Las tablas y sus migraciones

En última instancia, me decidí por una arquitectura construida alrededor de dos tablas. El primero fue Pedidos:

Aqui estan las constantes que explican el modelo mas a fondo:

Hay dos maneras de ajustar el tiempo: TIME_ADJUST_ABIT, es decir, intervalos de minutos u horas antes o después de la hora elegida, o TIME_ADJUST_OTHER, un tiempo de reunión diferente por completo.

Y la segunda tabla fue RequestResponses

Básicamente, quién pidió el cambio, quién respondió a él y cuál fue la respuesta: aceptar o rechazar.

La segunda tabla es necesaria para la ocasion de muchos participantes.

Pidiendo Cambios

Los organizadores de la reunión y los participantes pueden acceder a los Pedidos de cambio a través del menú de opciones desplegable que construimos en el último episodio:

Build Your Startup Request Scheduling Changes - Options Menu Request ChangesBuild Your Startup Request Scheduling Changes - Options Menu Request ChangesBuild Your Startup Request Scheduling Changes - Options Menu Request Changes

El formulario de Pedir Cambio

El actionCreate() de RequestController.php carga el formulario desde el cual el usuario pide cambios:

Build Your Startup Request Scheduling Changes - Request a Change FormBuild Your Startup Request Scheduling Changes - Request a Change FormBuild Your Startup Request Scheduling Changes - Request a Change Form

Y aquí es donde comenzó la complejidad. ¿Qué tipo de cambios podrían solicitar los participantes?

  • ¿Quieres reunirte mas temprano o más tarde?
  • ¿Quieres reunirte en un momento totalmente diferente?
  • ¿Quieres reunirte en un lugar diferente?

Nota: Todavía no he implementado la posibilidad de agregar nuevos lugares y horas. En este momento, puede elegir fechas y lugares alternativos entre los que se ofrecieron durante el proceso de planificación.

Un desplegable de tiempos anteriores y posteriores

El código para crear la lista desplegable era complicado. Lo hice para que pudiera elegir dos horas y media antes o más tarde, en incrementos de 15 minutos cerca del tiempo original y los incrementos de 30 minutos después de eso:

Llené $altTimesList con claves de cada tiempo posible con valores del tiempo amigable ajustado para la zona horaria del usuario. Luego utilicé ksort () para ordenar la lista desplegable para que aparecieran tiempos anteriores más tarde.

Uno de los asesores de Meeting Planner (sólo tengo uno por el momento), sugirió que se muestre el tiempo de reunión actualmente seleccionado, el cual hice a continuación. También agregué un separador con la opción deshabilitada en un menú desplegable. Divide tiempos anteriores de tiempos posteriores pero no es seleccionable:

Build Your Startup Request Scheduling Changes - Enhanced Request Form with SeparatorBuild Your Startup Request Scheduling Changes - Enhanced Request Form with SeparatorBuild Your Startup Request Scheduling Changes - Enhanced Request Form with Separator

Aquí está el código desplegable, que muestra cómo deshabilitar el separador basado en clave de índice de  $currentStart:

Y, cuando los participantes quieren elegir una de las otras veces, hay JQuery para cambiar los desplegables, otra complejidad a la construcción de los formularios:

Aquí está /frontend/web/js/request.js:

Asi es como el formulario se ve con las horas alternativas ocultas:

Build Your Startup Request Scheduling Changes - Selecting a different placeBuild Your Startup Request Scheduling Changes - Selecting a different placeBuild Your Startup Request Scheduling Changes - Selecting a different place

Diferentes lugares se integran en la lista desplegable del lugar (como se puede ver con la imagen arriba).

Manejando el Pedido

Una vez que el pedido es hecho, notificamos que la otra persona participante sera notificada. Y, cuando haya pedidos activos para una reunion, hay un enlace para Mirarlos

Build Your Startup Request Scheduling Changes - Meeting page View RequestsBuild Your Startup Request Scheduling Changes - Meeting page View RequestsBuild Your Startup Request Scheduling Changes - Meeting page View Requests

Decidí que esto sería un acercamiento simple, sin impedimentos para que la gente tenga acceso a peticiones.

La lista de pedidos de reuniones

Aqui esta la lista de Pedidos para una reunion, casi siempre uno solo:

Build Your Startup Request Scheduling Changes - List of Meeting RequestsBuild Your Startup Request Scheduling Changes - List of Meeting RequestsBuild Your Startup Request Scheduling Changes - List of Meeting Requests

Request::buildSubject() crea la string basado en el contenido de la solicitud, el cambio de tiempo y/o lugar:

Esta función es también usada repetidamente en las notificaciones por correo.

Hay también limites en RequestController.php el cual previenen a usuarios de hacer mas de una petición para reunión a la vez:

Aquí como se ve la pagina de petición mostrando cuando se limita:

Build Your Startup Request Scheduling Changes - Viewing a RequestBuild Your Startup Request Scheduling Changes - Viewing a RequestBuild Your Startup Request Scheduling Changes - Viewing a Request

Si es tu propio pedido, puedes Cancelar Tu Pedido.

Como puedes ver, hay mucha diversidad de funcionalidad UX para construir para esto. Y no te he mostrado cuando otras personas que no sean el solicitante responden.

Notificaciones por email de Pedido y Respuesta

En el proceso de creación de estas características, decidí crear plantillas de correo electrónico generic_html y generic_text, así como una función Request::notify() reutilizable para facilitar la entrega de diferentes tipos de anuncios en torno a Meeting Planner.

Aqui el metodo Request::create() para preparar un correo electronico:

La matriz $content se rellena para el asunto del correo electrónico, el encabezado del mensaje y los párrafos, mientras que la matriz $button se utiliza para cualquier botón de comando como Responder a solicitud o Ver reunión.

Aqui el metodo notify(), similar a las acciones anteriores send() y finalize() las cuales envian el correo electronico:

Esencialmente, el diseño de generic_html.php es basado en la simple textual plantilla de actualización que hable en nuestros tutoriales de plantillas de correo electrónico. Proporciona una forma bien formateada de actualizar a los participantes vía correo electrónico con unos pocos párrafos.

Aqui la vista de el archivo generic_html.php intengrando los datos de $contento y $button. Comprueba un segundo y tercer párrafo, $p2, $p3 y los datos de $button :

Aquí hay un ejemplo de una notificación que Rob Smith me pregunto para cambiar el tiempo y lugar de nuestra reunión (Generado con el codigo siguiente):

Build Your Startup Request Scheduling Changes - Email Notification of Requested ChangeBuild Your Startup Request Scheduling Changes - Email Notification of Requested ChangeBuild Your Startup Request Scheduling Changes - Email Notification of Requested Change

Respondiendo a Pedidos

Cuando hago click en "Responder A Pedido", me llevan al método actionCreate () del controlador RequestResponse:

Build Your Startup Request Scheduling Changes - Respond to Request Form - Accept or DeclineBuild Your Startup Request Scheduling Changes - Respond to Request Form - Accept or DeclineBuild Your Startup Request Scheduling Changes - Respond to Request Form - Accept or Decline

A través de la solicitud UX, incorporé la capacidad para que  personas puedan escribir notas, proporcionando el contexto para las peticiones y respuestas.

Uno de los desafíos de este formulario fue determinar cómo dirigir las respuestas a los métodos de otro controlador en los cuales el boton enviar se hizo clic. En otras palabras, distinguir entre diferentes clics de botón de envío POST.

Aqui esta /frontend/views/request-response/_form.php:

Esencialmente, agregue los valores 'accept' o 'reject' de name para cada boton. Entonces, esto es enviado como un valor publicado, como se mustra:

Cuando la persona a la cual se ha enviado, acepta o declina el pedido, se les muestra un mensaje y se les envia un correo electronico También, la reunión no tiene mas ningún pedido pendiente para mostrar:

Build Your Startup Request Scheduling Changes - Meeting page after Request accepted Build Your Startup Request Scheduling Changes - Meeting page after Request accepted Build Your Startup Request Scheduling Changes - Meeting page after Request accepted

Aqui esta la notificacion por email de Pedir Cambios Aceptado:

Build Your Startup Request Scheduling Changes - Email notification of requested change being acceptedBuild Your Startup Request Scheduling Changes - Email notification of requested change being acceptedBuild Your Startup Request Scheduling Changes - Email notification of requested change being accepted

Muchas cosas pasan en Request::accept() mira abajo:

Antes de enviar el correo electrónico, el horario de la reunión se actualiza para reflejar cualquier nueva fecha / hora y / o lugar nuevo. Después de enviar el correo electrónico, la reunión se finaliza. Esto entrega una nueva actualización de reunión con el calendario actualizado a todos los participantes:

Build Your Startup Request Scheduling Changes - Updating Meeting NoticeBuild Your Startup Request Scheduling Changes - Updating Meeting NoticeBuild Your Startup Request Scheduling Changes - Updating Meeting Notice

¿Que sigue?

Espero que hayas disfrutado de este tutorial. Construir esta característica tardó más de lo que esperaba, pero resultó bastante bien. Creo que añade una dimensión a la programación con Meeting Planner incomparable por otros servicios.

Si aún no lo ha hecho, vaya a programar su primera reunión con Meeting Planner. He seguido haciendo progresos increíbles hacia la versión beta, a pesar de las distracciones (la programacion es difícil):

También estoy planeando escribir un tutorial sobre crowdfunding, así que considere seguir nuestra página de WeFunder Meeting Planner.

Por favor comparte tus comentarios abajo. Siempre estoy abierto a nuevas ideas de características y sugerencias de temas para futuros tutoriales. También puede contactar conmigo @reifman.

Manténgase en sintonía para todo esto y más en tutoriales próximos, echa un vistazo a la serie construya su startup con PHP. Y definitivamente echa un vistazo a nuestra Programación con la serie Yii2 (Envato Tuts +).

Enlaces relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.