diff --git a/2021y22.csv b/2021y22.csv index 2887db3..ebf41cc 100644 --- a/2021y22.csv +++ b/2021y22.csv @@ -1,2 +1,2 @@ -Nombre,Apellido,TipoDoc,Documento,Direccion,Pais,Ciudad,Telefono,Email,Profesión,Financiación,"Detalle Financiación" -German,Correa,C.I,4596793-2,"Salvador Garcia Pintos 1114",Uruguay,Montevideo,091432378,german.correa.balier@gmail.com,Estudiante,no, +Nombre,Apellido,TipoDoc,Documento,Direccion,Pais,Ciudad,Telefono,Email,Profesión,"Trabaja en",Financiación,"Detalle Financiación" +German,Correa,Otro,234,"Salvador Garcia Pintos 1114",Alemania,Montevideo,091432378,german.correa.balier@gmail.com,Estudiante,Primaria,no, diff --git a/img/afiche.jpg b/img/afiche.jpg index a3123da..c681c24 100644 Binary files a/img/afiche.jpg and b/img/afiche.jpg differ diff --git a/img/pmu15-tapa.png b/img/pmu15-tapa.png new file mode 100644 index 0000000..e8ec901 Binary files /dev/null and b/img/pmu15-tapa.png differ diff --git a/index.html b/index.html index be72704..d808378 100644 --- a/index.html +++ b/index.html @@ -20,7 +20,7 @@
-

Bienvenidos al 6º Coloquio Uruguayo de Matemática 2017

+

Bienvenidos!

@@ -48,10 +48,22 @@ Ezequiel Maderna Martín Reiris

- -
+

+ A 20 años de la creación del Centro de Matemática este propuso comenzar a realizar un evento periódico que promoviera el desarrollo de la investigación en Matemática y a su vez estimulara y organizara el estudio de esta tanto a nivel de grado como de posgrado e influyera en su desarrollo en todos sus niveles. Así fue que en el año 2007 el CMAT en conjunto con el IMERL comenzó a organizar está serie de Coloquios bianuales de Matemática orientados al público matemático en general, sean investigadores, estudiantes de grado y posgrado de matemática, docentes universitarios y de secundaria, estudiantes de profesorado (IPA, CERP), etc. El evento es de carácter gratuito y cuenta con cursos para docentes, para estudiantes de grado y posgrado y varias conferencias dictadas por investigadores tanto nacionales como invitados extranjeros. +

+
+
+
+ +
+
+

Publicaciones Matemática del Uruguay (PMU)

+

Los Coloquios se publican regularmente en las PMU.

+
+
+
- +
diff --git a/js/app.js b/js/app.js index d7233ec..3d27c9f 100644 --- a/js/app.js +++ b/js/app.js @@ -11,8 +11,34 @@ function showmsg(msgTxt,ok){ } $("#statusmsg").show(); } +function inputvalidate(){ + var parent = $(this).parents("div.form-group"); + if($(this).is(":invalid")) + parent.addClass("has-error"); + else{ + parent.removeClass("has-error"); + //parent.removeClass("has-warning"); + parent.addClass("has-success"); + } +} +function validateTextarea(){ + if($(this).val() == ""){ + //$('#detallefinan').removeClass("has-warning"); + $('#detallefinan').addClass("has-error"); + $("#detallefinan textarea").tooltip("hide"); + $("#detallefinan textarea").tooltip("destroy"); + } + else{ + //$('#detallefinan').removeClass("has-warning"); + $('#detallefinan').removeClass("has-error"); + $('#detallefinan').addClass("has-success"); + + } +} + $(document).ready(function(){ var ruta = window.location.pathname; + $("#statusmsg").hide(); $("#header").load("snippets/header.html"); $("#footer").load("snippets/footer.html"); @@ -20,9 +46,18 @@ $(document).ready(function(){ $("#menu li a").click(function(){ $(this).addClass("selected").siblings().removeClass("selected"); }); + $('input').focusin(inputvalidate); + $('input').focusout(inputvalidate); + $('input').keyup(inputvalidate); + $("#detallefinan textarea").focusin(validateTextarea); + $("#detallefinan textarea").focusout(validateTextarea); + $("#detallefinan textarea").keyup(validateTextarea); + //$('input:invalid').parents('div.form-group').addClass('has-warning'); + $('#contactform').submit(function(event){ $("#statusmsg").hide(); event.preventDefault(); + var post = $.post('contact.php', $(this).serialize()); post.done(function(data){ data = $.parseJSON(data); @@ -40,36 +75,117 @@ $(document).ready(function(){ console.log(error) }); }); - $("#detallefinan").hide(); + $("#detallefinan").hide(); + $("#detallefinan textarea").val(""); + $('input:radio[name="financiacion"]').change(function(){ if($(this).is(':checked') && $(this).val() == "si"){ - $("#detallefinan").show(); - $('#detallefinan textarea').prop('required',true); + $("#detallefinan").show(); + $("#detallefinan textarea").addClass("has-error"); } - else{ + else $("#detallefinan").hide(); - $('#detallefinan textarea').prop('required',false); - $("#detallefinan textarea").value(""); - } }); - $('#doctype').change(function(){ - if(this.value == "C.I"){ - $('#txtdocnro').attr('placeholder',"1234567-0"); - } - if(this.value == "Otro"){ - $('#txtdocnro').attr('placeholder',"Escriba su documento de identidad"); - } - if(this.value == "Tipo:"){ - $('#txtdocnro').attr('placeholder',"Seleccion un tipo de documento"); - } + + var tipodoc; + $('#tipodoc li a').click(function(event){ + event.preventDefault(); + $('#btntipodoc').tooltip("hide"); + $('btnpais').tooltip("destroy"); + tipodoc = $(this).text(); + $("#btntipodoc").text($(this).text()); + $("#btntipodoc").val($(this).text()); + if(tipodoc == "Otro"){ + $("#txtdocnro").attr('placeholder', 'Escriba su documento'); + $("#txtdocnro").removeAttr('pattern'); + } + if(tipodoc == "C.I."){ + $("#txtdocnro").attr('placeholder', '1234567-0'); + $("#txtdocnro").attr('pattern', '[0-9]{5,7}-[0-9]'); + } + }); + var pais; + $('#lstpais li a').click(function(event){ + event.preventDefault(); + pais = $(this).text(); + $('#btnpais').tooltip("hide"); + $('btnpais').tooltip("destroy"); + $("#btnpais").text($(this).text()); + $("#btnpais").val($(this).text()); + }); + var trabaja; + $('#lsttrabaja li a').click(function(event){ + event.preventDefault(); + trabaja = $(this).text(); + $('#btntrabaja').tooltip("hide"); + $('btnpais').tooltip("destroy"); + $("#btntrabaja").text($(this).text()); + $("#btntrabaja").val($(this).text()); + }); - }); $('#registerform').submit(function(event){ - $("#statusmsg").hide(); + var fail = false; + $("#statusmsg").hide(); event.preventDefault(); - var post = $.post('register.php', $(this).serialize()); - post.done(function(data){ + if(tipodoc == null){ + + $('#btntipodoc').tooltip({ + "title":"Seleccione Tipo de Documento", + "html":true, + "pacement":"auto left", + "trigger":"manual", + "delay":{"show":100,"hide":2000} + + }); + $('#btntipodoc').tooltip("show"); + fail=true; + + } + if(pais == null){ + $('#btnpais').tooltip({ + "title":"Seleccione País", + "html":true, + "pacement":"auto left", + "trigger":"manual", + "delay":{"show":100,"hide":2000} + + }); + $('#btnpais').tooltip("show"); + fail=true; + } + if(trabaja == null){ + $('#btntrabaja').tooltip({ + "title":"Especifique donde trabaja", + "html":true, + "pacement":"auto left", + "trigger":"manual", + "delay":{"show":100,"hide":2000} + + }); + $('#btntrabaja').tooltip("show"); + fail=true; + + } + if($("#detallefinan textarea").val()=="" && + $('input:radio[name="financiacion"]:checked').val()=="si"){ + $("#detallefinan textarea").tooltip({ + "title":"Escriba el detalle", + "html":true, + "pacement":"auto left", + "trigger":"manual" + }); + $("#detallefinan textarea").tooltip("show"); + fail=true; + } + if(!fail){ + $("#txtpais").val(pais); + $("#txttipodoc").val(tipodoc); + $("#txttrabaja").val(trabaja); + console.log($(this).serialize()); + var post = $.post('register.php', $(this).serialize()); + post.done(function(data){ + console.log(data); data = $.parseJSON(data); if(data.success){ showmsg(data.message,true); @@ -82,10 +198,11 @@ $(document).ready(function(){ } console.log(data) - }); - post.fail(function(error){ - console.log(error) - - }); + }); + post.fail(function(error){ + console.log(error) + + }); + } }); }); \ No newline at end of file diff --git a/lib/recaptchalib.php b/lib/recaptchalib.php new file mode 100644 index 0000000..32c4f4d --- /dev/null +++ b/lib/recaptchalib.php @@ -0,0 +1,277 @@ + $value ) + $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; + + // Cut the last '&' + $req=substr($req,0,strlen($req)-1); + return $req; +} + + + +/** + * Submits an HTTP POST to a reCAPTCHA server + * @param string $host + * @param string $path + * @param array $data + * @param int port + * @return array response + */ +function _recaptcha_http_post($host, $path, $data, $port = 80) { + + $req = _recaptcha_qsencode ($data); + + $http_request = "POST $path HTTP/1.0\r\n"; + $http_request .= "Host: $host\r\n"; + $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; + $http_request .= "Content-Length: " . strlen($req) . "\r\n"; + $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; + $http_request .= "\r\n"; + $http_request .= $req; + + $response = ''; + if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { + die ('Could not open socket'); + } + + fwrite($fs, $http_request); + + while ( !feof($fs) ) + $response .= fgets($fs, 1160); // One TCP-IP packet + fclose($fs); + $response = explode("\r\n\r\n", $response, 2); + + return $response; +} + + + +/** + * Gets the challenge HTML (javascript and non-javascript version). + * This is called from the browser, and the resulting reCAPTCHA HTML widget + * is embedded within the HTML form it was called from. + * @param string $pubkey A public key for reCAPTCHA + * @param string $error The error given by reCAPTCHA (optional, default is null) + * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) + + * @return string - The HTML to be embedded in the user's form. + */ +function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false) +{ + if ($pubkey == null || $pubkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($use_ssl) { + $server = RECAPTCHA_API_SECURE_SERVER; + } else { + $server = RECAPTCHA_API_SERVER; + } + + $errorpart = ""; + if ($error) { + $errorpart = "&error=" . $error; + } + return ' + + '; +} + + + + +/** + * A ReCaptchaResponse is returned from recaptcha_check_answer() + */ +class ReCaptchaResponse { + var $is_valid; + var $error; +} + + +/** + * Calls an HTTP POST function to verify if the user's guess was correct + * @param string $privkey + * @param string $remoteip + * @param string $challenge + * @param string $response + * @param array $extra_params an array of extra variables to post to the server + * @return ReCaptchaResponse + */ +function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) +{ + if ($privkey == null || $privkey == '') { + die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); + } + + if ($remoteip == null || $remoteip == '') { + die ("For security reasons, you must pass the remote ip to reCAPTCHA"); + } + + + + //discard spam submissions + if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { + $recaptcha_response = new ReCaptchaResponse(); + $recaptcha_response->is_valid = false; + $recaptcha_response->error = 'incorrect-captcha-sol'; + return $recaptcha_response; + } + + $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", + array ( + 'privatekey' => $privkey, + 'remoteip' => $remoteip, + 'challenge' => $challenge, + 'response' => $response + ) + $extra_params + ); + + $answers = explode ("\n", $response [1]); + $recaptcha_response = new ReCaptchaResponse(); + + if (trim ($answers [0]) == 'true') { + $recaptcha_response->is_valid = true; + } + else { + $recaptcha_response->is_valid = false; + $recaptcha_response->error = $answers [1]; + } + return $recaptcha_response; + +} + +/** + * gets a URL where the user can sign up for reCAPTCHA. If your application + * has a configuration page where you enter a key, you should provide a link + * using this function. + * @param string $domain The domain where the page is hosted + * @param string $appname The name of your application + */ +function recaptcha_get_signup_url ($domain = null, $appname = null) { + return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); +} + +function _recaptcha_aes_pad($val) { + $block_size = 16; + $numpad = $block_size - (strlen ($val) % $block_size); + return str_pad($val, strlen ($val) + $numpad, chr($numpad)); +} + +/* Mailhide related code */ + +function _recaptcha_aes_encrypt($val,$ky) { + if (! function_exists ("mcrypt_encrypt")) { + die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); + } + $mode=MCRYPT_MODE_CBC; + $enc=MCRYPT_RIJNDAEL_128; + $val=_recaptcha_aes_pad($val); + return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); +} + + +function _recaptcha_mailhide_urlbase64 ($x) { + return strtr(base64_encode ($x), '+/', '-_'); +} + +/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ +function recaptcha_mailhide_url($pubkey, $privkey, $email) { + if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { + die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . + "you can do so at http://www.google.com/recaptcha/mailhide/apikey"); + } + + + $ky = pack('H*', $privkey); + $cryptmail = _recaptcha_aes_encrypt ($email, $ky); + + return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); +} + +/** + * gets the parts of the email to expose to the user. + * eg, given johndoe@example,com return ["john", "example.com"]. + * the email is then displayed as john...@example.com + */ +function _recaptcha_mailhide_email_parts ($email) { + $arr = preg_split("/@/", $email ); + + if (strlen ($arr[0]) <= 4) { + $arr[0] = substr ($arr[0], 0, 1); + } else if (strlen ($arr[0]) <= 6) { + $arr[0] = substr ($arr[0], 0, 3); + } else { + $arr[0] = substr ($arr[0], 0, 4); + } + return $arr; +} + +/** + * Gets html to display an email address given a public an private key. + * to get a key, go to: + * + * http://www.google.com/recaptcha/mailhide/apikey + */ +function recaptcha_mailhide_html($pubkey, $privkey, $email) { + $emailparts = _recaptcha_mailhide_email_parts ($email); + $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); + + return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); + +} + + +?> diff --git a/register-old.html b/register-old.html new file mode 100644 index 0000000..f859584 --- /dev/null +++ b/register-old.html @@ -0,0 +1,85 @@ + + + + + 6to Coloquio Uruguayo de Matémática + + + + + + + + + + + + +
+
+
+
+ +
+

Registrarse

+
+
+

+ Nombre + + + + +

+

+ Documento: + + + + +

+

+ Dirección: + +

+

+ Pais: + + + + +

+

Teléfono:

+

Email:

+

Profesión:

+ +

+ Precisa financiación? + + +

+
+

+ Detalle, con estimación de costo: + +

+ +

 

+
+
+
+ Success! Indicates a successful or positive action. +
+
+ +
+
+ + + + diff --git a/register.html b/register.html index f859584..3a8eacb 100644 --- a/register.html +++ b/register.html @@ -9,67 +9,160 @@ + + +
-
-
-
- -
-

Registrarse

-
-
-

- Nombre - - - - -

-

- Documento: - - - - -

-

- Dirección: - -

-

- Pais: - - - - -

-

Teléfono:

-

Email:

-

Profesión:

- -

- Precisa financiación? - - -

-
-

- Detalle, con estimación de costo: - -

- -

 

+ +
+
+
+

Registrarse

+ +
+ +
+ +
- +
+ +
+ +
+
+ +
+ +
+
+
+ + +
+ + +
+
+
+
+ + + +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+ +
+
+
Success! Indicates a successful or positive action.
@@ -77,9 +170,12 @@
-
+
+ +
+
+ -
diff --git a/register.php b/register.php index 9d151b2..ca977d2 100644 --- a/register.php +++ b/register.php @@ -1,14 +1,29 @@ '6LeLxy4UAAAAABClplWLJUjZ1_nhX_-SI7CuNcm8', + 'response' => $_POST["g-recaptcha-response"] + ); + $options = array( + 'http' => array ( + 'header' => 'Content-Type: application/x-www-form-urlencoded\r\n', + 'method' => 'POST', + 'content' => http_build_query($data) + ) + ); + $context = stream_context_create($options); + $verify = file_get_contents($url, false, $context); + $captcha_success=json_decode($verify); + return captcha_success; +} function setheaders() { $fp = fopen("2021y22.csv", 'w'); $cabezal = array('Nombre', 'Apellido','TipoDoc','Documento', 'Direccion','Pais','Ciudad', 'Telefono', 'Email', - 'Profesión','Financiación','Detalle Financiación'); + 'Profesión','Trabaja en','Financiación','Detalle Financiación'); if($fp){ fputcsv($fp,$cabezal); fclose($fp); @@ -22,7 +37,10 @@ function registrar($fila) { $fp = fopen("2021y22.csv", 'a'); if($fp){ fputcsv($fp,$fila); - fclose($fp); + fclose($fp); + exec("git add 2021y22.csv"); + $cmd = "git commit -m 'Se registra a '".$fila[0]." ".$fila[1]."-".$fila[3]; + exec($cmd); } else{ die("unable to open file"); @@ -30,6 +48,10 @@ function registrar($fila) { } +$errors = array(); // array to hold validation errors +$data = array(); // array to pass back data +$filename = "2021y22"; + // validate the variables ====================================================== $data['nombre'] = $_POST['nombre']; $data['apellido'] = $_POST['apellido']; @@ -41,6 +63,7 @@ $data['ciudad'] = $_POST['ciudad']; $data['telefono'] = $_POST['tel']; $data['email'] = $_POST['email']; $data['profesion'] = $_POST['profesion']; +$data['trabaja'] = $_POST['trabaja']; $data['financiacion'] = $_POST['financiacion']; $data['detallefinan'] = $_POST['detallefinan']; @@ -74,6 +97,28 @@ if (empty($_POST['email'])) if (empty($_POST['profesion'])) $errors['email'] = 'indique profesion'; +if (empty($_POST['trabaja'])) + $errors['trabaja'] = 'Indique en el sector que trabaja'; +if(empty($_POST['g-recaptcha-response'])){ + $errors['recaptcha'] = 'Debe validar el captcha'; +} +else if(!verifyCaptcha()){ + $errors['recaptcha'] = 'Error en la validación de ReCaptcha'; +} + + +/*if ($_POST['g-recaptcha-response']){ + $response = $reCaptcha->verifyResponse( + $_SERVER["REMOTE_ADDR"], + $_POST["g-recaptcha-response"] + ); + if($response == null || !$response->sucess) + $errors['captcha'] = 'no captcha seleceted'; +} +else{ + echo "falta el captcha"; +}*/ + if( !file_exists("2021y22.csv")) setheaders(); diff --git a/register2.html b/register2.html new file mode 100644 index 0000000..f1cbb18 --- /dev/null +++ b/register2.html @@ -0,0 +1,180 @@ + + + + + 6to Coloquio Uruguayo de Matémática + + + + + + + + + + + + + + + +
+ +
+
+
+

Registrarse

+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+
+
+ + +
+ + +
+
+
+
+ + + +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+ Success! Indicates a successful or positive action. +
+
+ +
+
+
+ +
+
+ + +
+ + diff --git a/registro.csv b/registro.csv deleted file mode 100644 index 2887db3..0000000 --- a/registro.csv +++ /dev/null @@ -1,2 +0,0 @@ -Nombre,Apellido,TipoDoc,Documento,Direccion,Pais,Ciudad,Telefono,Email,Profesión,Financiación,"Detalle Financiación" -German,Correa,C.I,4596793-2,"Salvador Garcia Pintos 1114",Uruguay,Montevideo,091432378,german.correa.balier@gmail.com,Estudiante,no, diff --git a/snippets/header.html b/snippets/header.html index 6558b79..a0ebfee 100644 --- a/snippets/header.html +++ b/snippets/header.html @@ -3,17 +3,17 @@

VI Coloquio Uruguayo
de Matemática

-

20, 21 y 22 de Diciembre

+

20, 21 y 22 de Diciembre, 2017

diff --git a/style/style.css b/style/style.css index 1694002..8934d0f 100644 --- a/style/style.css +++ b/style/style.css @@ -30,6 +30,9 @@ h1, h2, h3, h4, h5, h6 margin: 0 0 15px 0; padding: 15px 0 5px 0;} +h1#welcome{ + font-size:300%; +} h2 { font: normal 160% 'century gothic', arial, sans-serif; color: #43423F;} @@ -123,6 +126,7 @@ ol li { /*width: 860px;*/ /*position: relative*/; /*height: 200px;*/ + padding:10px 0px; background:inherit;} #logo #logo_text @@ -167,11 +171,16 @@ ol li { border-radius: 0px; } -@media screen and (max-width: 768px){ +@media screen and (max-width: 600px){ ul#menu{ margin:auto!important; float:none!important; } + #logo_text h1{font-size:30px;} + #logo_text h2{font-size:20px!important;} + #logo_text h1 a .logo_init{font-size:60px;} + #logo_text h1 a .logo_colour{font-size:30px;} + .logo_colour{font-size:30px;} } ul#menu { /*float: right; @@ -201,6 +210,18 @@ ul#menu li a color: #FFF; border: none;} +ul.dropdown-menu{ + margin:0px; + min-width:100px; +} + +ul.dropdown-menu li{ + background:none!important; + padding:0px!important; +} +ul.dropdown-menu li a{ + border:none; +} ul#menu li.selected a { height: 20px; padding: 7px 15px 4px 15px; @@ -237,11 +258,8 @@ ul.interest-links li a{ padding: 0 15px 20px 15px; border: 1px solid; } -@media screen and (max-width: 640px){ - .sidebar { - border:none; - } -} + + #afiche{ display:block; margin-top:15px;