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

Creando su startup: Comandos avanzados de planificación

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Automatic Time-Zone Detection
Building Your Startup: Requesting Scheduling Changes

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

Final product image
What You'll Be Creating

Este tutorial forma parte de la serie Creando su startup con PHP en Envato Tuts +. En esta serie, te estoy guiando a través del lanzamiento de un inicio de concepto a realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso a lo largo del camino, voy a lanzar el código de Meeting Planner como código abierto del que puede aprender. También me ocuparé de asuntos relacionados con el inicio de negocios a medida que surjan.

Expandiendo opciones de programación

Cuando se inició la fase de pruebas del Meeting Planner, la brecha más clara fue la incapacidad de cambiar una reunión después de haber sido programada. Pero también había otras características que faltaban, como reenviar una invitación perdida en el correo electrónico, reprogramar una reunión por completo, o la capacidad de ver y editar los ajustes de control elegidos por el organizador.

Curiosamente, también comencé a darse cuenta de que la capacidad de ajustar las reuniones fácilmente después de haberlas programado podría hacer o deshacer la marca Meeting Planner. Por ejemplo, hay una gran cantidad de ingeniería social en el ajuste de la reunión posterior a la programación. A menudo, debe preguntar a los participantes si está bien ajustar la hora o el lugar. Tal vez usted sólo quiere reunirse 15 minutos antes o al día siguiente en el mismo momento y lugar. Pero no siempre puede hacer estos cambios sin consentimiento.

Mantener el sitio fácil de entender y fácil de usar con toda esta capacidad es mi principal directiva. ¿Cómo puedo añadir un número creciente de características sin enturbiar la interfaz de usuario o ocultarlas en exceso? ¿Cómo funcionaría esto en interfaces móviles y de escritorio?

En el tutorial de hoy, cubriremos la ampliación de la barra de navegación con Bootstrap y los conceptos básicos de la construcción de algunas de las funciones avanzadas de programación en Meeting Planner. La próxima semana revisaré la construcción de la característica más compleja para que los participantes soliciten cambios y que otros los acepten o rechacen.

Espero que pruebes todas las nuevas funciones de programación en el sitio en linea y comparta tus pensamientos y comentarios en los comentarios que aparecen a continuación. Yo participo en las discusiones, pero también puedes contactarme @reifman en Twitter. Siempre estoy abierto a nuevas ideas de funciones para Meeting Planner, así como sugerencias para futuros episodios de la serie.

Como recordatorio, todo el código para Meeting Planner se proporciona de código abierto y escrito en el framework de Yii2 para PHP. Si desea obtener más información acerca de Yii2, consulte mi serie paralela Programación con Yii2.

Ampliación de la barra de navegación

Primero, veamos cómo expandir la barra de navegación existente. Aquí está una lista de las características que había planeado agregar:

  • Permitir cambios en los lugares, fechas y horas de una reunión después de haber sido finalizado.
  • Solicitar ajustes más pequeños a una reunión, como podemos reunirnos una hora antes? ¿O en ese otro lugar sugerido?
  • Reestructurar una reunión completamente con los mismos participantes y lugares.
  • Repetición de una reunión utilizando participantes, lugares, días de la semana y horas del día de una reunión anterior para facilitar la programación de una nueva reunión.
  • Mostrando a los participantes una historia cronológica de todas las actividades de planificación para una reunión.
  • Visualización y actualización de la configuración de una reunión.

Como se puede ver, no sólo había mucha funcionalidad para construir, pero tampoco tenía una idea clara de dónde colocarla en la interfaz de usuario sin crear un lío.

La barra de comandos también necesitaba cambiar dependiendo del estado de una reunión. Las reuniones que estaban en fase de planificación tenían diferentes opciones que las reuniones pendientes, confirmadas o pasadas.

Las ideas iniciales de UX vuelven a Bootstrap

Mi idea inicial era proporcionar un pequeño vínculo de Configuración avanzada que mostraría una barra de comandos oculta. Yo experimenté con esto al principio, pero no era estéticamente agradable.

Luego, revisé la documentación de Bootstrap y encontré la lista desplegable:

Build Your Startup Advanced Scheduling - Bootstrap Documentation of Dropdown

Me gustó la forma en que funcionaba. Así que decidí colocar la mayoría de los comandos avanzados en un botón desplegable orientado hacia la izquierda.

He aquí un ejemplo de lo que parece en la fase de planificación de una reunión:

Build Your Startup Advanced Scheduling - Meeting Planner Button Dropdown

Tenga en cuenta que bootstrap ofrece una clase para menús desplegables. Una barra de comandos ubicada en la parte inferior de la página utiliza la siguiente forma:

También creé archivos de vista parciales que se mostrarán en función del estado de una reunión. Por ejemplo, en /frontend/views/meeting/view_confirmed.php, puede ver que el _command_bar_past.php o _command_bar_confirmed.php parcial está incluido:

Determinar el acceso a los comandos para diferentes espectadores

No quería permitir que todos vean todos los comandos. Los organizadores verían más comandos que los participantes, pero los ajustes de la reunión a menudo les dan acceso también.

A continuación, se muestra un ejemplo para determinar si se debe mostrar la opción de reabrir una reunión y realizar cambios en ella como si estuviera todavía en la fase de planificación:

La opción se incluye en el menú desplegable Bootstrap si la reunión no ha pasado su fecha de inicio y el espectador es el organizador o el organizador ha permitido a los participantes realizar cambios.

Ahora, vayamos a construir algunas de las funcionalidades de estos varios comandos.

Creación de Comandos avanzados de planificación

No es posible cubrir todo el nuevo trabajo que entró en estas características de programación. Por brevedad, cubriré sólo lo básico y cualquier aspecto único de varios comandos.

Cada característica tarda más ahora

Después de implementar algunas características de seguridad más profundas en Meeting Planner, intento adherirme a estándares de programacion más estrictos cuando añado nuevas características. Paso más tiempo en el acceso al controlador, las comprobaciones de acceso al modelo y la limitación de la velocidad.

Además, la versión beta soportará a varios participantes en una reunión, así que tengo que diseñar el código con eso en mente mientras voy.

En general, todo lo que hago toma un poco más de tiempo que lo hizo en el modo de prototipado rápido.

A medida que construía todas estas características de reunión diferentes, con frecuencia sentía el aumento de la carga de trabajo como he añadido a la base de código. Notará estas comprobaciones en el código siguiente.

También hay una atención al registro histórico de la reunión que estamos a punto de hacer visible. Por lo tanto, cada acción requiere a menudo un registro de registro. Y los registros de registro son útiles para apoyar la limitación de la velocidad.

Realización de cambios en una reunión

Una forma sencilla de permitir cambios en una reunión que se ha finalizado es simplemente permitir que el organizador lo vuelva a abrir, llevándolo de nuevo a la fase de planificación. A continuación, pueden agregar fechas y lugares, elegir nuevos y finalizar la reunión de nuevo.

También quería que el organizador capacitara a sus participantes para hacer esto. Esto requería finalmente la creación de la capacidad de ver y actualizar por configuración de la reunión.

He añadido ajustes para permitir a los participantes solicitar los cambios de los organizadores o hacerlos directamente.

Cuando se crea una reunión, sus configuraciones se inicializan con la configuración predeterminada del usuario:

Puede ver los resultados del nuevo controlador y la vista de actualización para MeetingSettings a continuación:

Build Your Startup Advanced Scheduling - Meeting Settings

Aquí está /frontend/controllers/MeetingController.php actionReopen():

Y aquí está el código del modelo Meeting.php para mover la reunión de nuevo al modo de planificación:

withinActionLimit está comprobando el número de veces que alguien intenta reabrir una reunión. IncreaseSequence es para el archivo .ics—como la fecha de la reunión, la hora y el cambio de lugar, el archivo ics necesita ser contado.

La imagen de abajo muestra una reunión que ha sido confirmada con una variedad de opciones avanzadas disponibles:

Build Your Startup Advanced Scheduling - Command bar with fully loaded Dropdown menu

Cuando el usuario hace clic en Hacer cambios en el menú anterior, el estado de la reunión se vuelve a planificar y pueden volver a actualizar la fecha, la hora y el lugar:

Build Your Startup Advanced Scheduling - Reopened Meeting Planning

Reprogramar una reunión

Si los eventos han llevado a los asistentes a darse cuenta de que sólo necesitan empezar de nuevo, la opción Reschedule cancela la reunión actual y crea una nueva invitación de planificación.

Actualmente, restrinjo esta función a los organizadores (no a los participantes), pero puedo ampliarla más adelante. El método Meeting.php::Reschedule() da soporte a cualquiera de las personas que realiza la acción:

Los participantes y el lugar seleccionado se clonan en la nueva reunión.

Repetir una reunión

Otro enfoque de la programación es permitir a los participantes duplicar reuniones pasadas. En el futuro, podría permitir que el espectador decida qué participantes, lugares y horas se duplican, pero por ahora, Meeting Planner crea una nueva reunión con los mismos participantes en el mismo lugar—y un día idéntico de la semana y la hora del día uno y Dos semanas en el futuro.

MeetingTime::createTimePlus() a continuación, agrega una hora de reunión en el mismo día de la semana y la hora del día, pero una semana en el futuro, incluso si la reunión original se produjo meses atrás. El bucle while era necesario para las reuniones más antiguas.

Re-enviar invitaciones

También construí una función de reenvío en caso de que un participante no recibiera su invitación original o confirmación final.

Planeo reconstruir la funcionalidad de correo saliente para trabajar asincrónicamente y facilitar la redelivery, pero afortunadamente los métodos actuales funcionaron bien en el escenario de reenvío con pocos cambios.

Historia de las reuniónes

A lo largo de la serie, hemos creado un registro de cada cambio realizado en las reuniones. Ahora hay una manera para que los asistentes vean el historial de planificación. Se parece a esto:

Build Your Startup Advanced Scheduling - Viewing the meeting history of events

MeetingLogController.php comprueba que el espectador es un asistente de la reunión y prepara los datos para ver el registro:

A continuación, el /frontend/views/meeting-log/index.php procesa los datos mostrados anteriormente:

¿Que sigue?

Ahora estoy en un intenso sprint de código para completar la versión beta. Los dioses editoriales de Envato Tuts + han hecho todo lo posible para distraerme con robots que controlan la mente y con bips de OKCupid de su aplicación con flujo de trabajo de iOS, pero han fracasado. El desarrollo del Meeting Planner continúa a un ritmo acelerado.

Resolver la ingeniería social y UX para los asistentes a la reunión para solicitar y responder a los ajustes de programación más pequeños podría hacer o romper la marca Meeting Planner, y eso es lo que estoy trabajando mayormente.

Si aún no lo ha hecho, vaya a programar su primera reunión con Meeting Planner. También estoy planeando escribir un tutorial sobre crowdfunding, así que considere seguir nuestra página WeFunder de Meeting Planner. También puede contactar conmigo @reifman. Siempre estoy abierto a nuevas ideas de características y sugerencias de temas para futuros tutoriales.

Manténgase en sintonía para todo esto y más tutoriales próximos, echa un vistazo a la Creando su startup con PHP Serie.

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.