From: Platonides Date: Tue, 22 May 2018 17:39:11 +0000 (+0200) Subject: Hago más genérico el código que gestiona los campos X-Git-Url: http://gitweb.wikimedia.es/?a=commitdiff_plain;h=9a814a199ac11f7024e81841227455d9ddd2adde;p=inscripciones%2Finscribirse Hago más genérico el código que gestiona los campos --- 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