Guía 66 – Calendario de actividades de un club

Al publicar los ejemplos que están basados en utilizar la biblioteca FullCanlendar, «Mark Donners» me ha solicitado un ejemplo que he realizado y que deseo compartir con todos vosotros.

El dispone de un club deportivo y establece una serie de sesiones de demostración, etc., y desea anunciarlo a sus usuarios y posibles nuevos clientes, pero desea que sea un «calendario» la forma de mostrar la disponibilidad de las distintas sesiones de los eventos.

Objetivo:

Mostrar en formato calendario la oferta de eventos de un club deportivo. Los requerimientos del aplicativo son:

– El administrador generará los eventos, especificando la tipología, la fecha y hora de emisión y además, gestionará la posibilidad de que el evento esté abierto para la inscripción de los asistentes o esté cerrado para no recibir más inscripciones.

– El visitante, al consultar el evento podrá consultar los datos de este y si está abierto, podrá solicitar la inscripción, presentando el sistema un formulario para recoger sus datos.

– Cuando termina la inscripción, el sistema envía un mensaje de email al visitante inscrito y a los administradores del sistema.

– En la gestión de inscripciones del evento el administrador puede admitir o no admitir la inscripción. El sistema enviará un email al inscriptor indicando si ha sido admitido o se le ha denegado la asistencia.

– Los mensajes de email serán personalizados de acuerdos a los datos del evento y del inscriptor.

DEMO:  https://fhumanes.com/club/

Usuario: admin/admin

Solución técnica:

Además de la citada biblioteca FullCanlendar . Se ha hecho para funcionar con PHP 8.X con PHPRunner 10.7. Se han utilizado los siguientes plugins disponibles en este portal:

  • Colors .- Para fijar el color de los tipos de eventos.
  • Summernote .- Editor de HTML para describir los eventos y para fijar las plantillas de los emails.
  • Switch .- Para indicar si el evento está abierto para las inscripciones o no lo está.
  • Telephone.- Para el formulario de inscripción, en el campo del teléfono.

El aspecto del aplicativo es:

Por defecto tiene esta visualización (Mes, Trimestre y Año), pero con pequeños ajustes se puede variar esta visualización.  Tiene puesto el «Tooltip» para facilitar la información del evento.

Se muestra en ventana «popup» la información del evento. En cabecera está el plugin de Switch que indica si está abierta la inscripción o no, y en la parte inferior está el botón de solicitud de inscripción, sólo aparecerá si está abierta la inscripción.

En la misma ventana «popup» se muestra el formulario para solicitar la inscripción.

A modo de presentación y explicación de las camerísticas de los menajes de email construidos y enviados se muestra:

1.- En mensaje que recibe el usuario que se inscribe:

2.- Mensaje que reciben los administradores en la inscripción de un usuario:

En este artículo no voy a explica nada sobre la utilización de la biblioteca FullCalendar, porque esta información está en la Guía 64, mostraré alguno aspectos nuevos sobre lo programado.

Visualización o no del botón de inscripción. En página VIEW, evento «Process record Values» :

$pageObject->setProxyValue("id_event", $values['id_event']);
$pageObject->setProxyValue("enrolment", $values['enrolment']);

// Hide Custom Button
if ( $values['enrolment'] <> 1 ) {
  $pageObject->hideItem("custom_request", $recordId); 
}

En evento «Client Before» del botón «Custom_butom»:

var id_event = proxy['id_event'];
var enrolment = proxy['enrolment'];

window.open("request_add.php?masterkey1="+id_event+"&mastertable=event&iframe=y","_self"); 

return false;

En página ADD de la tabla «request», evento: «Before Display»:

// To eliminate parts of the page when a visitor is making the request
if($_SESSION['iframe']=='y') {
$xt->assign("left_block", false);     // Turn off Menú left
$xt->assign("supertop_block", false); // Turn off Menú top
}

En esta misma página en evento: «After Record Added»:

// Send Email
// Email the Administrators
$rs = DB::Query("SELECT GROUP_CONCAT(email SEPARATOR ',') administrators FROM user WHERE `group` = 'administrators'");
$data_administrators = $rs->fetchAssoc();

// Information the Config
$rs = DB::Query("SELECT * from config");
$data_config = $rs->fetchAssoc();

// Information the Event
$id_event = $values['event_id'];
$rs = DB::Query("SELECT * FROM event WHERE id_event = $id_event");
$data_event = $rs->fetchAssoc();

// Array convert text
$arr_source = array('{event}','{event_id}','{petition_name}','{petition_email}','{petition_phone}','{petition_id}','{date_now}');
$arr_posting = array($data_event['title'],$data_event['id_event'],$values['name'],$values['email'],$values['phone'],$values['id_petition'],date('l jS \of F Y h:i:s A'));

// Message the email
$msg_request = str_replace($arr_source, $arr_posting, $data_config['email_text_1_message_user']);
$msg_admin = str_replace($arr_source, $arr_posting, $data_config['email_text_1_message_admin']);

// Email User
$email=$values['email'];
$message=$msg_request;
$subject= $data_config['club_name']." - Registration request in Event";
runner_mail(array('to' => $email, 'subject' => $subject, 
'htmlbody' => $message, 'charset' => 'UTF-8'));

// Email Administrators
$email=$data_administrators['administrators'];
$message=$msg_admin;
$subject= $data_config['club_name']." - New registration request";
runner_mail(array('to' => $email, 'subject' => $subject, 
'htmlbody' => $message, 'charset' => 'UTF-8'));

// Close Windows Popup
$html = <<<EOT
<html>
<head>
<meta charset='utf-8' />
</head>
<body>
<div>
<p>New updated request</p>
</div>
<script>
window.parent.location.reload();
</script>
</body>
</html>
EOT;
echo $html;
exit();

En este último código podemos apreciar:

  • Cómo se construyen y se envían los email.
  • Cómo se cierra la ventana «popup» y se hace «reload» de la página princial.

Espero que os guste y sobre todo, os sea útil y para cualquier duda contactar conmigo a través de mi email [email protected].

Os dejo los fuentes del proyecto para que lo instaléis en vuestros PC’s, podáis estudiarlo y haced todos los cambios que consideréis oportunos.

Adjuntos

Archivo Tamaño de archivo Descargas
zip PHPRunner 10.7 y Backup base de datos 791 KB 554

Blog personal para facilitar soporte gratuito a usuarios de React y PHPRunner