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

Construyendo Tu Startup: Completando Programación de Grupo

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Meetings With Multiple Participants
Building Your Startup: Importing With the Google Contacts API

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Final product image
What You'll Be Creating

Este tutorial es parte de la serie Construyendo Tu Startup Con PHP en Envato Tuts+. En esta serie, te estoy guiando a través de lanzar una startup desde el concepto a la realidad usando mi aplicación Planificador de Reuniones como un ejemplo de la vida real. Cada paso a lo largo del camino, liberará el código de Planificador de Reuniones como ejemplos de código abierto que de los cuales puedes aprender. También abordaré asuntos de negocios relacionados con startup según vayan surgiendo.

Desarrollo En Marcha de Reuniones Grupales

¡Bienvenido! Este es el episodio de continuación para Construyendo Tu Startup: Reuniones con Múltiples Participantes. Hoy, estaré completando el trabajo que comenzamos en ese episodio: programar reuniones de múltiples participantes.

Un Breve Recordatorio

Programar reuniones con múltiples participantes siempre fue una meta mayor para Planificador de Reuniones, que se lanzó solo con programación 1:1. Las reuniones de múltiples participantes son las más retadoras para gente para intentar programar con cada uno y de ahí una de las características más valiosas para servicio que proporcionar de Planificador de Reuniones.

En el tutorial de hoy, voy a cubrir revisando todas las áreas del sitio afectado por reuniones de múltiples participantes, manejando y mostrando inteligentemente listas de recipientes de varios estados, administrar notificaciones apropiadamente y filtrando para grupos y finalmente mejorando la recientemente lanzada característica requerir cambios de reunión.

Programa Tu Primera Reunión de Grupo

¡Por favor programa tu propia reunión de grupo hoy! Invita a unos cuantos amigos para encontrar para tu kombucha o kava. Comparte tus ideas y retroalimentación de la experiencia de todos en los comentarios de abajo. Participo en las discusiones, pero también puedes contactarme en Twitter @reifman. Siempre estoy abierto a nuevas ideas de características para Planificador de Reuniones así como a sugerencias para futuros episodios en la serie.

Como recordatorio, todo el código para Planificador de Reuniones es proporcionado de código abierto y escrito en el Framework Yii2 para PHP. Si quisieras aprender más sobre Yii2, revisa mi serie paralela Programando Con Yii2.

Revisando el Código

Como puedes imaginar, transformar Planificador de Reuniones de reuniones 1:1 a reuniones grupales tocó casi todo el código. Tuve que pensar a través de todas las áreas, revisar el código, y hacer cambios de pequeños a moderados en muchos lugares. En otras áreas, hubiera diseñado para múltiples participantes, y los cambios no fueron necesarios o fueron menores.

Por ejemplo, programación grupal tocada:

En su mayoría, en donde previamente solo enviaríamos a participante[0], el primer y único participante, ahora necesitaba procesar el arreglo de participantes. Y, haciéndolo, necesitaba revisar:

  • ¿Este participante es un organizador?
  • ¿Esta persona ha sido removida o ha declinado por su cuenta?
  • En el futuro, ¿esta persona ha optado por no recibir notificaciones para esta reunión?

Los Retos de Probar

Con más recursos, podría haber administrado esto más exhaustivamente con pruebas automáticas. Sin embargo, trabajando en solitario con la entrega como meta, probé manualmente todo de manera exhaustiva.

Usé un dominio de correo catchall para que pudiera invitar n1, n2, n3, n4 y n5 @midominiodeprueba.com a mi muestra de reuniones grupales. Afortunadamente, las invitaciones de Planificador de Reuniones hacen fácil iniciar sesión rápidamente con cualquier cuenta dando clic dentro de cada invitación de reunión; esto ayudó a mis pruebas.

Era importante revisar casi todo el código de planificación de reunión.

Pero regresemos a los retos de código más específicos de la segunda mitad de la característica de programación grupal.

Mostrando Inteligentemente Listas de Participantes

Hace un tiempo, construí el método MiscHelpers para mostrar listas gramaticalmente correctas en Inglés con "and" antes del último nombre, como se muestra en el índice de reunión abajo:

Startup Series Group Scheduling - The Meeting Index

Sin embargo, quise simplificar la visibilidad de la disponibilidad de fecha y lugar. Por ejemplo, en vez de listar cinco nombres de gente que aceptó reunirse en Herkimer Coffee, actualicé MiscHelpers::listNames para decir, "todos los demás".

Puedes ver esto en acción abajo:

Startup Series Group Scheduling - Time and Place Availability Lists

Pero en vez de decir "No hay respuesta todos los demás," es más propio decir "No hay respuesta de nadie más.", lo que hace el código.

Abajo, puedes ver MeetingPlace::getWhereStatus() preparando estas cadenas para cada lugar en el panel de lugares de reunión:

Cada usuario tiene una fila MeetingPlaceChoice relacionada a MeetingPlace que graba si un lugar es aceptable, no aceptable o no respondido aún. MeetingTimeChoice también existe de manera similar. Esta información es pasada a listNames().

Declinando y Retirándose de una Reunión

Los grupos también requerían más intrincación cuando de rechazaba una invitación de reunión. Anteriormente, si un participante declinaba, la reunión estaba efectivamente cancelada. Ahora, uno podría declinar, dejando a los otros tres continuar.

Así que si un participante recibe una invitación a una reunión, ellos pueden Declinar. Pero si la reunión ya ha sido confirmada y finalizada, entonces ellos están esencialmente Retirándose como puedes ver abajo:

Startup Series Group Scheduling - Withdraw button in a Meeting View

Nota: En la imagen de abajo, es Sarah Smithers viendo el botón Retirarse; Robert McSmith ha sido removido por otro organizador, sea Jeff o Alex.

Sin embargo, si es un organizador (propietario de reunión o participante organizador agregado), ellos pueden solo Cancelar la reunión. Abajo está de  _command_bar_confirmed.php. Este determina qué botones presentar:

La priorización es un elemento clave de construir una startup. Así que mientras quería ofrecer una manera para que un usuario se retirara o volviera a unir a una reunión, decidí agregar esto a la lista de tarea Asana para después. Un usuario que se vuelve a unir necesita notificaciones actualizadas y posiblemente algunas actualizaciones a sus estructuras de datos de programación.

Pensando a Través de Notificaciones

Mientras que con reuniones 1:1, cada cambio necesitaba ser enviado a la otra parte, esto no necesariamente tiene sentido para reuniones de 12 personas---¿o sí? Depende.

Inicialmente, creé lineamientos generales. Si un participante estaba actualizando sus preferencias para una fecha específica o lugar, solo el propietario y otros organizadores necesitaban ser actualizados sobre esto.

Creé un arreglo $groupSkip en MeetingLog que determinó eventos que no deberían ser enviados a otros participantes.

En MeetingLog::getHistory, saltamos notificar al participante para estos eventos pero siempre notificamos a los organizadores:

En un ejemplo inusual, el código fue de hecho más simple con múltiples participantes: Meeting::findFresh(), que busca actualizaciones de cambios de reunión para compartir vía email.

Más temprano, tuvimos que identificar cuál de los dos usuarios realizaron las dos acciones y si notificarlos o no también. Ahora, solo notificamos al propietario y después notificamos a los participantes:

Cualquier filtrado es hecho a más profundidad dentro de la textualización de registro del evento.

Notificaciones Mejoradas: "¡Todos Están Disponibles!"

También creé una nueva notificación para alertar a organizadores cuando todos están de acuerdo en al menos un lugar y fecha específicos, MeetingLog::ACTION_SEND_EVERYONE_AVAILABLE:

Esto notifica a los organizadores cuando la reunión está lista para finalizar/confirmar.

Aquí está el código que busca todos los lugares y tiempos de reunión para ver si todos están de acuerdo en al menos un lugar:

De manera similar, construí una función para mostrar un aviso al organizador de que ninguna de las fechas y lugares son aceptables para cualquiera, Meeting::isSomeoneAvailable():

Esto indica que ellos deberían sugerir fechas y/o lugares adicionales.

Actualizando Recordatorios de Reunión

Todo acerca de recordatorios de reunión funcionó bien para múltiples participantes, pero necesité desactivar los recordatorios si un participante había declinado o retirado de una reunión o había sido removido:

STATUS_DEFAULT indica un asistente que debería ser agregado al arreglo de usuarios para recordatorios de email también.

Revisando Archivos de Calendario

También revisé el trabajo de generar archivos de calendario para invitaciones para asegurar que todos los asistentes están incluidos. En Meeting::prepareDownloadIcs(), junté un arreglo de asistentes con el propietario y participantes asistiendo de manera activa:

Durante este tiempo, también aprendí cómo indicar que un archivo de calendario de una reunión cancelada debería disparar la remosión del evento del calendario de alguien. El estándar ics es poderoso aunque no fácil de aprender.

Actualizando Cambios de Petición para Grupos

Como escribí recientemente, la característica de Solicitando Cambios de Reunión requirió mucho trabajo y una nueva UX.

Startup Series Group Scheduling - Request a Change to Your Meeting

Para reuniones de múltiples participantes, la ingeniería social necesitó ser cambiada de nuevo. Por ejemplo, los organizadores pueden aceptar o rechazar peticiones y cambiar el horario de la reunión. Sin embargo, los participantes solo pueden expresar Gusto, Disgusto o Indiferencia sobre peticiones de cambios. Y los organizadores deberían ver todas las respuestas de los participantes para ayudarlos en su toma de decisiones.

Aquí está lo que ve el participante después de que envían su petición de cambio:

Startup Series Group Scheduling - Confirming Your Request

Las nuevas peticiones de cambio necesitaban ser enviadas a todos los participantes. Esto es manejado transparentemente por las notificaciones de registro de actividad. Cunado una petición es hecha, el evento es creado en envío RequestController::actionCreate():

Aquí está como luce la notificación de cambio solicitado para los otros participantes:

Startup Series Group Scheduling - Email Notification of Requested Changes to Participants

A todos se les pide responder. Dar clic a Responder a Petición salta justo a la petición. O puedes encontrarlo a través de la lista de peticiones desde el enlace de alerta en la reunión mostrada arriba.

Startup Series Group Scheduling - List of Requests

Nueva UX para Participantes Respondiendo a Peticiones

Aquí está el formulario que los participantes ven cuando responden a una petición:

Startup Series Group Scheduling - Participants View of Responding to a Request

Si ya hay otras respuestas de participantes, ellos las verán:

Startup Series Group Scheduling - Startup Series Group Scheduling - Participants View of Responding to a Request with Others Responses

Aquí está la parte superior de ese formulario en /frontend/views/request-response/_form.php:

El Gridview lista las respuestas existentes, ej. Gusto, Disgusto, Neutral y cualquier nota personal adjunta.

Entonces, aquí está el código de la mitad inferior del formulario, que mostrará Gusto, Disgusto, Indiferencia a los participantes pero Aceptar y Hacer Cambios o Declinar Petición a los propietarios.

Startup Series Group Scheduling - Organizers View of Responding to a Request

A los participantes que son organizadores se les muestran ambos conjuntos de botones y pueden expresar su opinión o declinar el cambio.

Aquí está el email de notificación de que un cambio ha sido aceptado:

Startup Series Group Scheduling - Email Notification that Change was Accepted

Por supuesto, una invitación actualizada y archivos de calendario serán enviados a todos si el cambio es realizado.

Siempre Hay Más Mejoras que Hacer

Espero que hayas disfrutado estos dos episodios (el de hoy y Construyendo Tu Startup: Reuniones Con Múltiples Participantes). En modo startup con una enorme nueva característica, siempre hay un esfuerzo enfocado y coordinado, que deja muchos cabos sueltos sin atender y defectos sin pulir.

Unos cuantos ejemplos de esto incluyen:

  • Volviéndose a unir a reuniones que has declinado o de las que te has retirado.
  • Presentación mejorada de lista de participantes en invitaciones.
  • Opciones para mantener la lista de participantes y/o sus estados individuales privados de otros participantes.
  • Manejo mejorado de presentación de información de contacto de grupo y detalles de conferencia virtual, ej. una línea de conferencia y código de participación.
  • URL segura para compartir invitaciones de reunión. Esto permitiría a los organizadores compartir una URL en Facebook o vía email para invitar a nuevos participantes.

A pesar de estas deficiencias, he trabajado muy arduamente para alcanzar este nivel de función y usabilidad para Planificador de Reuniones. Estoy super emocionado sobre este progreso y escuchando buena retroalimentación sobre este desde amigos y colegas.

Estoy entregando estos dos tutoriales hoy y tomando unos cuantos días fuera de línea en el bosque para algún tiempo de relajación. El descanso es importante. Estar en contacto con la naturaleza te ayuda a recordarte lo que es importante en la vida---las startups no lo son siempre, de hecho. Podría haber presecuciones creativas, importantes para nuestro ingreso y carreras, podrían en algunos casos ayudar a la gente a vivir más eficiente y productivamente--pero son frecuentemente distantes de la tierra, de amistades y de ayudar a los menos afortunados. Estas son todas las cosas sobre las que pienso día con día y lo haré de nuevo mientras estoy fuera.

Me pregunto a mi mismo repetidamente si estoy haciendo todo lo que quiero hacer con mi tiempo---especialmente a la luz de mi cirugía de cerebro.

También tomo el corazón del hecho de que estoy orgulloso de Planificador de Reuniones, especialmente el trabajo hasta la fecha y su creciente utilidad. De manera general, la beta del servicio se está acercando a estar completo.

Las reuniones de múltiples participantes ha sido el elemento restante de trabajo más desalentador y complejo. Mirando hacia adelante, las características son más moderadas, pequeñas y más fácilmente manejables. ¡Estoy emocionado sobre sus futuros prospectos!

Si no lo has hecho aún, ¡programa ahora tu primera reunión con Planificador de Reuniones!

Un tutorial sobre corwdfunding también está en marcha, así que por favor sigue nuestra página WeFunder Meeting Planer.

También puedes contactarme en @reifman. Siempre estoy abierto a nuevas ideas de características y sugerencias de tópicos para futuros tutoriales.

Mantente en sintonía para este y más tutoriales próximos revisando la serie Construyendo Tu Startup Con PHP.

Enlaces Relacionados

Advertisement
Advertisement
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.