Je suis en train de coder quelque chose :
SI l'user a moins de 20 posts,
SI son post contient un lien sortant
ALORS
mettre son post en attente de modération.
Voici ce que j'ai fait :
dans functions_posting.php
AVANT
- Code: Tout sélectionner
// Start the transaction here
$db->sql_transaction('begin');
INSERER
- Code: Tout sélectionner
/* MOD EMPECHER LES NOUVEAUX MEMBRES DE POSTER DES LIENS SORTANTS
--------------------------------------------------------------------------------------------------
Si un mec ayant moins de 20 posts poste un message contenant un lien sortant,
le post est mis en attente de modération
-------------------------------------------------------------------------------------------------- */
$sql_user = "SELECT user_posts FROM phpbb3_users WHERE user_id = ".$user->data['user_id'];
$result_user = $db->sql_query($sql_user);
$row_user = $db->sql_fetchrow($result_user);
$posts_user = $row_user['user_posts'];
if ($posts_user < 20) // Si l'auteur a moins de X messages
{
// Y'a-t-il un lien dans le message ? le #i est une option qui désensibilise la casse.
// Fonctionne si le lien est brut
// Bloque tous les liens bbcodés (même internes, je ne sais pas pourquoi).
if (preg_match('#href="(.+)"#i', $data['message'] ,$tableau_resultat) || preg_match('#[url=(.+)]#i', $data['message'] ,$tableau_resultat2))
{
if(!empty($tableau_resultat[1])) { $url = $tableau_resultat[1]; }
elseif (!empty($tableau_resultat2[1])) { $url = $tableau_resultat2[1]; }
$home_url = "mondomaine.com";
if(strpos($url, $home_url)=== false) // Si oui, regarder si c'est un lien interne
{
// Un lien externe a été trouvé : on le met en attente de modération
$post_approval = 0;
// Et on envoie un mail aux modérateurs pour leur dire de checker le panneau d'admin ?
}
}
}
/* FIN DU MOD
-------------------------------------------------------------------------------------------------- */
Or ça buggue.
- Code: Tout sélectionner
if (preg_match('#href="(.+)"#i', $data['message'] ,$tableau_resultat) || preg_match('#[url=(.+)]#i', $data['message'] ,$tableau_resultat2))
=> Quand je fais ça, il met le post en attente de modération s'il contient un [quote] ?!
=> De plus, il le met en attente quand il y'a un lien de la forme [url=... , que ce soit un lien interne, ou un lien sortant.
Je ne comprends pas pourquoi : je pense que mes REGEX sont foireuses.
Voici mes questions :
- quelqu'un pourrait-il m'aider à bétonner mes REGEX pour faire exactement ce que je veux et rien d'autre ?
- comment puis-je optimiser ce code ? Je voudrais notamment me passer de la requête SQL, qui me sert à chopper le nombre de posts du posteur
Merci à ceux qui m'aideront à améliorer ça



