Salve a tutti!
scrivo perché ho la necessità di modificare un plugin di un cms (getsimple) pensato per creare form di contatto. Il problema sorge in quanto il plugin non è pensato per controllare che un checkbox (o radio) "term&conditions" (o privacy policy se preferite) sia spuntato prima di inviare la mail. In pratica nell'email inviata il plugin restituisce la scelta dell'utente ma non la blocca in nessun caso.
Il codice è troppo lungo, per cui mi limito a incollarne una parte e a linkare il file completo
*
* Check if field is empty and required or
* not empty but not valid.
* @return string the error key, or empty
*/
public function check_content()
{
if(empty($this->value) && $this->required) {
// empty and required
return 'field_required';
}
elseif(!empty($this->value) && !$this->check_validity()) {
// not empty but not valid
return 'field_' . $this->type;
}
else return '';
}
/**
* Check if field value is valid
* Mean different things depending on field type
* @return boolean
*/
public function check_validity()
{
if($this->blacklisted()) return False;
switch($this->type) {
case 'email':
$pattern = '`^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$`i';
if(preg_match($pattern, $this->value)) return True;
else return False;
case 'phone':
$pattern = '`^\+?[-0-9(). ]{6,}$$`i';
if(preg_match($pattern, $this->value)) return True;
else return False;
case 'website':
$pattern = "`^((http|https|ftp):\/\/(www\.)?|www\.)[a-zA-Z0-9\_\-]+\.([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})(\/[a-zA-Z0-9\-\._\?\&=,'\+%\$#~]*)*$`i";
if(preg_match($pattern, $this->value)) return 1;
else return False;
case 'message':
$size = strlen($this->value);
if($size > $this->form->settings('message_len')) return True;
else return False;
case 'captcha':
include_once CAPTCHAPATH . 'securimage.php';
$securimage = new Securimage();
if($securimage->check($this->value) == False)
return False;
else return True;
case 'fieldcaptcha':
if(!empty($this->value)) return False;
else return True;
case 'password':
if($this->value == $this->required)
return True;
else return False;
default:
return True;
}
}
Ora, nella mia ignoranza per prima cosa io vedo che nella function check_validity() manca il caso che fa per me, qualcosa del tipo:
case 'radio':
if($this->value == "si")
return True;
else return False;
Questo volendo usare un html che sarà più o meno:
<div class="field radio">
<div class="label"><label for="p01-contact1_field4">Acconsento al trattamento dei dati personali come da D.Lgs. 196 del 2003 <strong style="color:red">*</strong></label></div>
<input id="p01-contact1_field4_option0" type="radio" name="p01-contact_fields[4]" value=" si" /> si
<input id="p01-contact1_field4_option1" type="radio" name="p01-contact_fields[4]" value=" no" checked /> no</div>
Inutile dire che non funziona... in questo modo mi restituisce l'errore (in questo caso Field_radio) in ogni caso.
Abbiate pazienza con un povero profano e datemi una mano... non vi sto ad elencare i tentativi fatti... -.-
Grazie!!!