1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
|
case "delete": //Si on veut supprimer le post
//On récupère la valeur de p
$post = (int) $_GET['p'];
$query=$bdd->prepare('SELECT post_createur, post_texte, forum_id, topic_id, auth_modo FROM forum_post LEFT JOIN forum_forum ON forum_post.post_forum_id = forum_forum.forum_id WHERE post_id=:post');
$query->bindValue(':post',$post,PDO::PARAM_INT);
$query->execute();
$data = $query->fetch();
$topic = $data['topic_id'];
$forum = $data['forum_id'];
$poster = $data['post_createur'];
//Ensuite on vérifie que le membre a le droit d'être ici
//(soit le créateur soit un modo/admin)
if (!verif_auth($data['auth_modo']) && $poster != $id)
{
// Si cette condition n'est pas remplie ça va barder :o
erreur(ERR_AUTH_DELETE);
}
else //Sinon ça roule et on continue
{
//Ici on vérifie plusieurs choses :
//est-ce un premier post ? Dernier post ou post classique ?
$query = $bdd->prepare('SELECT topic_first_post, topic_last_post FROM forum_topic WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data_post=$query->fetch();
//On distingue maintenant les cas
if ($data_post['topic_first_post']==$post) //Si le message est le premier
{
//Les autorisations ont changé !
//Normal, seul un modo peut décider de supprimer tout un topic
if (!verif_auth($data['auth_modo']))
{
erreur(ERR_AUTH_DELETE_TOPIC);
}
//Il faut s'assurer que ce n'est pas une erreur
echo'<p>Vous avez choisi de supprimer un post.
Cependant ce post est le premier du topic. Voulez vous supprimer le topic ? <br />
<a href="./postvalide.php?action=delete_topic&t='.$topic.'">oui</a> - <a href="./affichertopic.php?t='.$topic.'">non</a>
</p>';
$query->CloseCursor();
}
elseif ($data_post['topic_last_post']==$post) //Si le message est le dernier
{
//On supprime le post
$query=$bdd->prepare('DELETE FROM forum_post WHERE post_id = :post');
$query->bindValue(':post',$post,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On modifie la valeur de topic_last_post pour cela on
//récupère l'id du plus récent message de ce topic
$query=$bdd->prepare('SELECT post_id FROM forum_post WHERE topic_id = :topic
ORDER BY post_id DESC LIMIT 0,1');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$last_post_topic=$data['post_id'];
$query->CloseCursor();
//On fait de même pour forum_last_post_id
$query=$bdd->prepare('SELECT post_id FROM forum_post WHERE post_forum_id = :forum
ORDER BY post_id DESC LIMIT 0,1');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$data=$query->fetch();
$last_post_forum=$data['post_id'];
$query->CloseCursor();
//On met à jour la valeur de topic_last_post
$query=$bdd->prepare('UPDATE forum_topic SET topic_last_post = :last WHERE topic_last_post = :post');
$query->bindValue(':last',$last_post_topic,PDO::PARAM_INT);
$query->bindValue(':post',$post,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du forum et on met à
//jour forum_last_post
$query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post - 1, forum_last_post_id = :last WHERE forum_id = :forum');
$query->bindValue(':last',$last_post_forum,PDO::PARAM_INT);
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du topic
$query=$bdd->prepare('UPDATE forum_topic SET topic_post = topic_post - 1 WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du membre
$query=$bdd->prepare('UPDATE membres SET membre_post = membre_post - 1 WHERE membre_id = :id');
$query->bindValue(':id',$poster,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Enfin le message
echo'<p>Le message a bien été supprimé !<br />
Cliquez <a href="./affichertopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
}
else // Si c'est un post classique
{
//On supprime le post
$query=$bdd->prepare('DELETE FROM forum_post WHERE post_id = :post');
$query->bindValue(':post',$post,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du forum
$query=$bdd->prepare('UPDATE forum_forum SET forum_post = forum_post - 1 WHERE forum_id = :forum');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du topic
$query=$bdd->prepare('UPDATE forum_topic SET topic_post = topic_post - 1
WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève 1 au nombre de messages du membre
$query=$bdd->prepare('UPDATE membres SET membre_post = membre_post - 1 WHERE membre_id = :id');
$query->bindValue(':id',$data['post_createur'],PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Enfin le message
echo'<p>Le message a bien été supprimé !<br />
Cliquez <a href="./affichertopic.php?t='.$topic.'">ici</a> pour retourner au topic<br />
Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
}
} //Fin du else
break;
case "delete_topic":
$topic = (int) $_GET['t'];
$query=$bdd->prepare('SELECT forum_topic.forum_id, auth_modo FROM forum_topic LEFT JOIN forum_forum ON forum_topic.forum_id = forum_forum.forum_id
WHERE topic_id=:topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data = $query->fetch();
$forum = $data['forum_id'];
//Ensuite on vérifie que le membre a le droit d'être ici
//c'est-à-dire si c'est un modo / admin
if (!verif_auth($data['auth_modo']))
{
erreur(ERR_AUTH_DELETE_TOPIC);
}
else //Sinon ça roule et on continue
{
$query->CloseCursor();
//On compte le nombre de post du topic
$query=$bdd->prepare('SELECT topic_post FROM forum_topic WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$data = $query->fetch();
$nombrepost = $data['topic_post'] + 1;
$query->CloseCursor();
//On supprime le topic
$query=$bdd->prepare('DELETE FROM forum_topic WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//On enlève le nombre de post posté par chaque membre dans le topic
$query=$bdd->prepare('SELECT post_createur, COUNT(*) AS nombre_mess FROM forum_post WHERE topic_id = :topic GROUP BY post_createur');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
while($data = $query->fetch())
{
$query=$bdd->prepare('UPDATE membres SET membre_post = membre_post - :mess WHERE membre_id = :id');
$query->bindValue(':mess',$data['nombre_mess'],PDO::PARAM_INT);
$query->bindValue(':id',$data['post_createur'],PDO::PARAM_INT);
$query->execute();
}
$query->CloseCursor();
//Et on supprime les posts !
$query=$bdd->prepare('DELETE FROM forum_post WHERE topic_id = :topic');
$query->bindValue(':topic',$topic,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Dernière chose, on récupère le dernier post du forum
$query=$bdd->prepare('SELECT post_id FROM forum_post WHERE post_forum_id = :forum ORDER BY post_id DESC LIMIT 0,1');
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$data = $query->fetch();
//Ensuite on modifie certaines valeurs :
$query=$bdd->prepare('UPDATE forum_forum SET forum_topic = forum_topic - 1, forum_post = forum_post - :nbr, forum_last_post_id = :id
WHERE forum_id = :forum');
$query->bindValue(':nbr',$nombrepost,PDO::PARAM_INT);
$query->bindValue(':id',$data['post_id'],PDO::PARAM_INT);
$query->bindValue(':forum',$forum,PDO::PARAM_INT);
$query->execute();
$query->CloseCursor();
//Enfin le message
echo'<p>Le topic a bien été supprimé !<br />
Cliquez <a href="./forum.php">ici</a> pour revenir à l index du forum</p>';
} //Fin du else
break; |
Partager