From 9a814a199ac11f7024e81841227455d9ddd2adde Mon Sep 17 00:00:00 2001 From: Platonides Date: Tue, 22 May 2018 19:39:11 +0200 Subject: [PATCH] =?utf8?q?Hago=20m=C3=A1s=20gen=C3=A9rico=20el=20c=C3=B3di?= =?utf8?q?go=20que=20gestiona=20los=20campos?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- html/inscripcion.php | 137 ++++++++++++++++++++++--------------------- 1 file changed, 71 insertions(+), 66 deletions(-) diff --git a/html/inscripcion.php b/html/inscripcion.php index 08a02de..2e6f33b 100644 --- a/html/inscripcion.php +++ b/html/inscripcion.php @@ -45,16 +45,12 @@ if (!isset($_GET['e']) || !$_GET['e']) { } $E = trim ($_GET['e'], "/"); -# Hasta arreglo definitivo... -$EmailText = "Email"; +# Una inscripción especial puede indicarse directamente en el nombre del evento if (substr ($E, -10) == "-iespecial") { $E = substr ($E, 0, -10); - $EmailOpc = TRUE; $EmailText = "Email"; - unset ($DE["exigidos"]); + $_GET["p"] = "-iespecial"; } -# $Email = ($E == "mensa" ? "info" : $E); - $I = ($_GET["uselang"] ?? "es"); $D0 = parsecfg ("jembot.0"); $DD = parsecfg ("jembot.data"); @@ -112,22 +108,37 @@ if (isset($_GET["g"])) { $Edicion = ($DE["tipo"] == "editatón" || $DE["tipo"] == "taller de edición"); $Exigidos = (array)$DE["exigidos"]; if ($Edicion) $Exigidos[] = "Cuenta"; +$Exigidos[] = "Email"; # Exigimos siempre el correo electrónico -# Hasta arreglo definitivo traslado arriba -# $EmailText = "Email"; -# Pendiente gestionar email también con $DE["exigidos"] if ($_GET["p"] ?? '' == "-iespecial") { - $EmailOpc = TRUE; $EmailText = "Email"; $Exigidos = array(); } -$DNI = (in_array ("DNI", $Exigidos) ? "{$DI["dni"]}" : $DI["dni"]); -$Nombre = (in_array ("Nombre", $Exigidos) ? "{$DI["nombre"]}" : $DI["nombre"]); -$Apellido1 = (in_array ("Apellido1", $Exigidos) ? "{$DI["apellido"]} 1" : "{$DI["apellido"]} 1"); -$Apellido2 = (in_array ("Apellido2", $Exigidos) ? "{$DI["apellido"]} 2" : "{$DI["apellido"]} 2"); -$Sexo = (in_array ("Sexo", $Exigidos) ? "{$DI["sexo"]}" : $DI["sexo"]); -$Edad = (in_array ("Edad", $Exigidos) ? "{$DI["edad"]}" : $DI["edad"]); -$Cuenta = (in_array ("Cuenta", $Exigidos) ? "{$DI["nombreusr"]}" : $DI["nombreusr"]); +$_POST += array( + 'Nombre' => '', + 'Apellido1' => '', + 'Apellido2' => '', + 'DNI' => '', + 'Email' => '', + 'Cuenta' => '', + 'Comentarios' => '', +); + +$CamposInscripciones = array ("Nombre", "Apellido1", "Apellido2", "DNI", "Sexo", "Edad", "Email", "Cuenta", "Experiencia", "Enterado", "Comentarios"); + +# TODO: renombrar estas claves +$DI["apellido1"] = "{$DI["apellido"]} 1"; +$DI["apellido2"] = "{$DI["apellido"]} 2"; +$DI["experiencia"] = $DI["exprevia"]; +$DI["enterado"] = $DI["medioenterado"]; +$DI["cuenta"] = $DI["nombreusr"]; +$DI["email"] = "Email"; + +foreach ($CamposInscripciones as $Campo) { + $msg = htmlspecialchars($DI[strtolower($Campo)]); + $ptrCampo = "Etiqueta$Campo"; + $$ptrCampo = in_array ($Campo, $Exigidos) ? "$msg" : $msg; +} $Org = $DE["organizador"]; $Colab = array_merge ((array) $Org, (array) $DE["colaboradores"]); @@ -155,22 +166,27 @@ if (isset($_POST["Confirmado"])) { # Datos enviados $Error[] = $DI["errw"]["maxhorarios"]; } - foreach (array ("Nombre", "Apellido1", "Apellido2", "DNI", "Sexo", "Edad", "Cuenta") as $C) { - if (empty ($_POST[$C]) && in_array ($C, $Exigidos)) { - $Error[] = $DI["errw"]["no" . strtolower ($C)]; + /* Comprobamos que hayan proporcionado todos los campos exigidos */ + foreach ($CamposInscripciones as $C) { + if (in_array ($C, $Exigidos) && (!isset ($_POST[$C]) || $_POST[$C] == '')) { + $Error[$C] = $DI["errw"]["no" . strtolower ($C)]; if ($C == "Cuenta") $Extra = $InfoCrear; } } - - $M = $_POST["Email"] ?? ""; - if (! filter_var ($M, FILTER_VALIDATE_EMAIL) && ($M || ! $EmailOpc)) { - $Error[] = $DI["errw"]["noemail"]; - } - $U = strtr ($_POST["Cuenta"], "_", " "); - if ($U) { + /* Adicionalmente, para el correo se comprueba que el email parezca correcto */ + $EmailUsuario = $_POST["Email"] ?? ""; + if ($EmailUsuario || in_array ("Email", $Exigidos)) { + if (! filter_var ($EmailUsuario, FILTER_VALIDATE_EMAIL)) { + $Error["Email"] = $DI["errw"]["noemail"]; + } + } + + /* Se verifica que la cuenta de la wiki exista y no esté bloqueada */ + $Usuario = ucfirst (strtr ($_POST["Cuenta"], "_", " ")); + if ($Usuario) { #Comprobar discrepancia en gender: - $D = api ("usuario", $U, $P); + $D = api ("usuario", $Usuario, $P); if (array_key_exists ("missing", $D)) { $Error[] = $DI["errw"]["cuentanula"]; @@ -182,19 +198,19 @@ if (isset($_POST["Confirmado"])) { # Datos enviados } } - if ($M || $U) { + if ($EmailUsuario || $Usuario) { foreach ($DE["inscritos"] as $Grupo => $Lista) { if (in_array ($Grupo, $GruposI)) { foreach (explode (";", $Lista) as $Cod) { - if ($M && $DU[$Cod]["Email"] == $M) { + if ($EmailUsuario && $DU[$Cod]["Email"] == $EmailUsuario) { $EmailRep++; - } elseif ($U && $DU[$Cod]["Cuenta"] == $U) { + } elseif ($Usuario && $DU[$Cod]["Cuenta"] == $Usuario) { $CuentaRep++; } } } } - if ($EmailRep) $Error[] = "El correo electrónico {$M} ya ha sido indicado por " . (count ($Grupos) > 1 ? "alguien inscrito en " . singpl ("grupo", $EmailRep) . " de los seleccionados." : "otro inscrito."); + if ($EmailRep) $Error[] = "El correo electrónico {$EmailUsuario} ya ha sido indicado por " . (count ($Grupos) > 1 ? "alguien inscrito en " . singpl ("grupo", $EmailRep) . " de los seleccionados." : "otro inscrito."); if ($CuentaRep) $Error[] = "La cuenta {$U} ya ha sido indicada por " . (count ($Grupos) > 1 ? "alguien inscrito en " . singpl ("grupo", $CuentaRep) . " de los seleccionados." : "otro inscrito."); } @@ -207,21 +223,20 @@ if (isset($_POST["Confirmado"])) { # Datos enviados $Cod = $DU["@"][0] . $Cod; } - $Letra = strtoupper (sinacentos (mb_substr ($U, 0, 1))); + $Letra = strtoupper (sinacentos (mb_substr ($Usuario, 0, 1))); if ($Letra < "A" || $Letra > "Z") $Letra = "X"; $Cod .= $Letra; $DU["@"] = $Cod; - if ($EmailOpc & ! $M) { - $_POST["Confirmado"] = "OK"; - } else { - $Base = 111111111111111; - $Conf = gmdate ("YmdHis") . "-" . rand ($Base, $Base * 9); - $_POST["Confirmado"] = $Conf; + if (!$EmailUsuario) { + /* El usuario se ha introducido manualmente sin que se indicara email */ + $_POST["CodigoConfirmacion"] = "manual"; + } else { + $_POST["CodigoConfirmacion"] = bin2hex(random_bytes(15)); } $_POST["Fecha"] = date ("Y-m-d"); - $_POST["Comentarios"] = strtr ($_POST["Comentarios"], array ("\r\n" => " █ ")); - $_POST["Cuenta"] = mayusprim (strtr ($_POST["Cuenta"], "_", " ")); + $_POST["Comentarios"] = strtr ($_POST["Comentarios"], array ("\r\n" => "\n", "\r" => "\n")); + $_POST["Cuenta"] = $Usuario; foreach ($_POST as $Campo => $V) { if ($Campo[0] == "_") { # $V vale "on", pero no es necesario comprobarlo, solo se pasan los "on" @@ -236,7 +251,7 @@ if (isset($_POST["Confirmado"])) { # Datos enviados writecfg ("jembot.@{$E}", $DE); $Marca = "-"; $Extra = ""; - if ($EmailOpc && ! $M) { + if (! $EmailUsuario) { print ""; } else { @@ -244,7 +259,7 @@ if (isset($_POST["Confirmado"])) { # Datos enviados $Texto = <<alert ('Inscripción finalizada correctamente. Se te ha enviado un correo con un enlace para que confirmes la validez de tu dirección, lo cual deberás hacer en las próximas 24 horas. Te esperamos en el evento.');"; } else { - print ""; + print ""; $Marca = "*"; $Extra = " - Error al enviar correo para confirmación"; } } @@ -338,16 +353,6 @@ foreach (array ("jpg", "png") as $Ext) { if (!empty($DE["abierto"])) { print ("La inscripción a este evento " . ($DE["abierto"] == "no" ? "no se encuentra abierta todavía. Puedes recibir más información {$DI["enviarmail"]}." : "se abrirá el {$DE["abierto"]}.")); } else { - - $_POST += array( - 'Nombre' => '', - 'Apellido1' => '', - 'Apellido2' => '', - 'DNI' => '', - 'Email' => '', - 'Cuenta' => '', - 'Comentarios' => '', - ); ?>
" METHOD=POST> @@ -357,14 +362,14 @@ if (!empty($DE["abierto"])) {

-
" /> -
" /> -
" /> +
" /> +
" /> +
" /> -
" /> +
" /> -
"/> +
"/> >     >     >     @@ -372,7 +377,7 @@ if (! in_array ("Sexo", $DE["invisibles"] ?? array())) { ?> -
+
>     >     @@ -390,7 +395,7 @@ if (! in_array ("Edad", $DE["invisibles"] ?? array())) { ?> -
" /> +
" /> 1) { $MaxF = 1; @@ -441,10 +446,10 @@ if (count ($Grupos) > 1) { } ?>
: -
(({$DI["crearla"]}"); ?>)" /> -
+
\n
\n
\n"); } -print ("\n