/** * Vérifie la validité d'une adresse de courriel. * * Les contraintes du mail sont déterminées par le mode de validation * En option, on contrôle aussi la disponibilité du mail dans la table des auteurs * * @param string $valeur * La valeur à vérifier. * @param array $options * Un éventuel tableau d'options. * @return string * Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur. */ function verifier_email_dist($valeur, $options=array()){ include_spip('inc/filtres'); if (!is_string($valeur)) { return $erreur; } // Disponibilite des courriels en base AUTEURS // Si l'adresse n'est pas disponible, on stoppe tout sinon on continue if (!empty($options['disponible']) and !verifier_disponibilite_email($valeur,isset($options['id_auteur'])?$options['id_auteur']:null)){ return _T('verifier:erreur_email_nondispo', array('email' => echapper_tags($valeur))); } // Choix du mode de verification de la syntaxe des courriels if (empty($options['mode']) or !in_array($options['mode'], array('normal','rfc5322','strict'))){ $mode = 'normal'; } else{ $mode = $options['mode']; } $fonctions_disponibles = array( 'normal' => 'email_valide', 'rfc5322' => 'verifier_email_rfc5322', 'strict' => 'verifier_email_de_maniere_stricte' ); $fonction_verif = $fonctions_disponibles[$mode]; if (!$fonction_verif($valeur)) { return _T('verifier:erreur_email', array('email' => echapper_tags($valeur))); } else { return ''; } }
function signatures_edit($script, $id, $arg, $row) { global $spip_lang_right, $spip_lang_left; $id_signature = $row['id_signature']; $id_article = $row['id_article']; $date_time = $row['date_time']; $nom_email= typo(echapper_tags($row['nom_email'])); $ad_email = echapper_tags($row['ad_email']); $nom_site = typo(echapper_tags($row['nom_site'])); $url_site = echapper_tags($row['url_site']); $statut = $row['statut']; $res = !autoriser('modererpetition', 'article', $id_article) ? '' : true; if ($res) { if ($id) $arg .= "&id_article=$id_article"; $arg .= "#signature$id_signature"; $retour_s = redirige_action_auteur('editer_signatures', $id_signature, $script, $arg); $retour_a = redirige_action_auteur('editer_signatures', "-$id_signature", $script, $arg); if ($statut=="poubelle"){ $res = icone_inline (_T('icone_valider_signature'), $retour_s, "forum-interne-24.gif", "creer.gif", "right", false); } else { $res = icone_inline (_T('icone_supprimer_signature'), $retour_a, "forum-interne-24.gif", "supprimer.gif", "right", false); if ($statut<>"publie") { $res .= icone_inline (_T('icone_relancer_signataire'), $retour_s, "forum-interne-24.gif", "creer.gif", "right", false); } } $res = "<div class='editer_auteurs'>$res</div>"; } $res .= "<div class='spip_small date'>".date_interface($date_time)."</div>\n"; if ($statut=="poubelle"){ $res .= "<div class='spip_x-small info_statut'>"._T('info_message_efface')."</div>\n"; } if (strlen($url_site)>6) { if (!$nom_site) $nom_site = _T('info_site'); $res .= "<div class='site'><span class='spip_x-small'>"._T('info_site_web')."</span> <a href='$url_site'>$nom_site</a></div>\n"; } if ($ad_email) $res .= signatures_edit_mail($id_article, $ad_email, $row); $res .= "<div class='texte'>" . message_de_signature($row) . "</div>"; if (!$id) { if ($r = sql_fetsel("titre, id_rubrique", "spip_articles", "id_article=$id_article")) { $id_rubrique = $r['id_rubrique']; $titre_a = $r['titre']; $titre_r = supprimer_numero(sql_getfetsel("titre", "spip_rubriques", "id_rubrique=$id_rubrique")); $href = generer_url_ecrire('naviguer', "id_rubrique=" . $id_rubrique); $h2 = generer_url_ecrire_article($id_article); $res .= "<div class='nettoyeur'></div><div class='reponse_a'><a title='$id_article' href='" . $h2 . "'>" . typo($titre_a) . "</a><a class='reponse_a' style='float: $spip_lang_right; padding-$spip_lang_left: 4px;' href='$href' title='$id_rubrique'>" . typo($titre_r) . " </a></div>"; } } $res = "<table class='signature' id='signature$id_signature' width='100%' cellpadding='3' cellspacing='0'>\n<tr><td class='verdana2 cartouche'>" . ($nom_site ? "$nom_site / " : "") . $nom_email . "</td></tr>" . "\n<tr><td class='serif contenu'>" . $res . "</td></tr></table>\n"; if ($statut=="poubelle") { $res = "<table class='signature' width='100%' cellpadding='2' cellspacing='0' border='0'><tr><td class='poubelle'>" . $res . "</td></tr></table>"; } return $res; }
function description_outil_une_variable($index, &$outil, &$variable, &$label, &$modif) { global $cs_variables, $metas_vars; $actif = $outil['actif']; // la valeur de la variable n'est stockee dans les metas qu'au premier post $valeur = isset($metas_vars[$variable])?$metas_vars[$variable]:cs_get_defaut($variable); $valeur = cs_retire_guillemets($valeur); //cs_log(" -- description_outil_une_variable($index) - Traite %$variable% = $valeur"); $cs_variable = &$cs_variables[$variable]; // autorisations de variables include_spip('inc/autoriser'); $cs_variable['disabled'] = $disab = autoriser('configurer', 'variable', 0, NULL, array('nom'=>$cs_variable['nom'], 'outil'=>$outil))?'':' disabled="disabled"'; // si ce n'est qu'une simple initialisation, on sort if(!$modif) return ''; $nombre = @$cs_variable['format']==_format_NOMBRE; // calcul du commentaire if($actif && isset($cs_variable['commentaire'])) { eval('$comment = '.str_replace('%s',cs_php_format($valeur, !$nombre),$cs_variable['commentaire']).';'); if($comment) $comment = "<p>$comment</p>"; } else $comment = ''; // si la variable necessite des boutons radio if(is_array($radios = &$cs_variable['radio'])) { if(!$actif) { $code = _T($radios[$valeur]); return "<input type=\"hidden\" name=\"$variable\" class=\"cs_hidden_checkbox\" value=\"$code\" />" . $label . (strlen($valeur)?ucfirst($code):' -'); } $res = "$label <ul>"; $i = 0; $nb = isset($cs_variable['radio/ligne'])?intval($cs_variable['radio/ligne']):0; foreach($radios as $code=>$traduc) { $br = (($nb>0) && ( ++$i % $nb == 0))?'</ul><ul>':''; $res .= "<li><label><input id=\"label_{$variable}_$code\" class=\"cs_input_checkbox\" type=\"radio\"" .($valeur==$code?' checked="checked"':'')." value=\"$code\" name=\"$variable\"$disab />" .($valeur==$code?'<b>':'')._T($traduc).($valeur==$code?'</b>':'') ."</label></li>$br"; } return $res.'</ul>'.$comment._VAR_OUTIL; } // si la variable necessite un select elseif(is_array($select = &$cs_variable['select'])) { if(!$actif) { $code = _T($select[$valeur]); return "<input type=\"hidden\" name=\"$variable\" class=\"cs_hidden_checkbox\" value=\"$code\" />" . $label . (strlen($valeur)?ucfirst($code):' -'); } $res = "$label <select name=\"$variable\"$disab>"; foreach($select as $code=>$traduc) { $res .= "<option" .($valeur==$code?' selected="selected"':'')." value=\"$code\">" ._T($traduc)."</option>"; } return $res.'</select>'.$comment._VAR_OUTIL; } // ... ou une case a cocher elseif(isset($cs_variable['check'])) { if(!$actif) return $label._T($cs_variable['check'])._T($valeur?'couteauprive:2pts_oui':'couteauprive:2pts_non'); return $label.'<label><input type="checkbox" '.($valeur?' checked="checked"':'')." value=\"1\" name=\"$variable\" $disab/>" .($valeur?'<b>':'')._T($cs_variable['check']).($valeur?'</b>':'').'</label>' . $comment._VAR_OUTIL; } // ... ou un textarea ... ou une case input if(!$actif) return $label.'<html>'.(strlen($valeur)?nl2br(echapper_tags($valeur)):' '._T('couteauprive:variable_vide')).'</html>'; $len = $nombre?6:0; $width = $len?'':'style="width:100%;" '; $lignes = !isset($cs_variable['lignes']) || $nombre?0:strval($cs_variable['lignes']); return $label . ( $lignes < 2 // <html></html> empechera SPIP de modifier le contenu des <input> ou <textarea> ?"<html><input name='$variable' value=\"" . htmlspecialchars($valeur) . "\" type='text' size='$len' $width $disab/></html>" :"<html><textarea rows='$lignes' name='$variable' $width$disab>" . htmlspecialchars($valeur) . '</textarea></html>' ) . $comment._VAR_OUTIL; }
/** * Vérifier la présence d'un protocole et de la bonne syntaxe du reste de l'url * * http://phpcentral.com/208-url-validation-in-php.html * <http[s]|ftp> :// [user[:pass]@] hostname [port] [/path] [?getquery] [anchor] * * @param string $valeur La valeur à vérifier * @param string $type_protocole : web (http ou https), mail (imap, pop3, smtp), ftp (ftp ou sftp), exact * @param string $protocole : nom du protocole (si type_protocole=exact) * @return boolean Retourne true uniquement lorsque l'url est valide */ function verifier_url_complet($url, $type_protocole, $protocole) { if ($msg = verifier_url_protocole($url, $type_protocole, $protocole) != '') { return $msg; } // SCHEME $urlregex = '#^(.*)\\:\\/\\/'; // USER AND PASS (optional) $urlregex .= '([a-z0-9+!*(),;?&=\\$_.-]+(\\:[a-z0-9+!*(),;?&=\\$_.-]+)?@)?'; // HOSTNAME OR IP $urlregex .= '[a-z0-9+\\$_-]+(\\.[a-z0-9+\\$_-]+)*'; // http://x = allowed (ex. http://localhost, http://routerlogin) //$urlregex .= "[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)+"; // http://x.x = minimum //$urlregex .= "([a-z0-9+\$_-]+\.)*[a-z0-9+\$_-]{2,3}"; // http://x.xx(x) = minimum //use only one of the above // PORT (optional) $urlregex .= '(\\:[0-9]{2,5})?'; // PATH (optional) $urlregex .= '(\\/([a-z0-9+\\$_%,-]\\.?)+)*\\/?'; // GET Query (optional) $urlregex .= '(\\?[a-z+&\\$_.-][a-z0-9;:@/&%=+\\$_.-]*)?'; // ANCHOR (optional) $urlregex .= '(\\#[a-z_.-][a-z0-9+\\$_.-]*)?\\$# i'; if (!preg_match($urlregex, $url)) { return _T('verifier:erreur_url', array('url' => echapper_tags($valeur))); } return ''; }
function controle_forum_boucle($row, $args) { $id_forum = $row['id_forum']; $forum_id_parent = $row['id_parent']; $forum_id_rubrique = $row['id_rubrique']; $forum_id_article = $row['id_article']; $forum_id_breve = $row['id_breve']; $forum_date_heure = $row['date_heure']; $forum_titre = echapper_tags($row['titre']); $forum_texte = $row['texte']; $forum_auteur = echapper_tags(extraire_multi($row['auteur'])); $forum_email_auteur = echapper_tags($row['email_auteur']); $forum_nom_site = echapper_tags($row['nom_site']); $forum_url_site = echapper_tags($row['url_site']); $forum_stat = $row['statut']; $forum_ip = $row['ip']; $forum_id_auteur = $row["id_auteur"]; $r = forum_parent($id_forum); $avant = $r['avant']; $url = $r['url']; $titre = $r['titre']; $type = $r['type']; $valeur = $r['valeur']; $pref = $r['pref']; if ($documents = sql_allfetsel('doc.id_document, doc.fichier AS fichier', 'spip_documents AS doc LEFT JOIN spip_documents_liens AS lien ON doc.id_document=lien.id_document', 'lien.id_objet='.intval($id_forum)." AND objet='forum'")) { include_spip('inc/documents'); foreach ($documents as $k => $t) { $h = generer_url_entite($t['id_document'], 'document'); $documents[$k] = "<a href='".$h."'>".basename($t['fichier'])."</a>"; } } switch($forum_stat) { case 'off': case 'privoff': $style = " style='border: 2px #ff0000 dashed;'"; break; case 'prop': $style = " style='border: 2px yellow solid; background-color: white;'"; break; case 'spam': $style = " style='border: 2px black dotted;'"; break; default: $style = ""; break; } if ($forum_email_auteur) { if (email_valide($forum_email_auteur)) $forum_email_auteur = "<a href='mailto:" .htmlspecialchars($forum_email_auteur) ."?subject=".rawurlencode($forum_titre)."'>".$forum_email_auteur ."</a>"; $forum_auteur .= " — $forum_email_auteur"; } $suite = "\n<br />$avant<b>$pref\n<a href='$url' class='controle'>$titre</a></b>" . "<div class='controle'>".justifier(propre($forum_texte))."</div>"; include_spip('public/composer'); if ($forum_notes = safehtml(calculer_notes())) $suite .= "<div class='notes controle'>".justifier(safehtml($forum_notes))."</div>"; if (strlen($forum_url_site) > 10 AND strlen($forum_nom_site) >= 3) $suite .= "\n<div style='text-align: left' class='serif'><b><a href='$forum_url_site'>$forum_nom_site</a></b></div>"; return "\n<div><br /><a id='forum$id_forum'></a></div>" . debut_cadre_forum("", true, "", typo($forum_titre)) . "<div$style>" . date_interface($forum_date_heure) . safehtml("<span class='arial2'> / <b>$forum_auteur</b></span>") . boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur, "$type=$valeur", $forum_ip, 'controle_forum', $args) . safehtml(lignes_longues($suite)) . afficher_forum_mots($id_forum) . join(', ', $documents) . "<div class='nettoyeur'></div></div>". fin_cadre_forum(true); }