/** * Méthode qui crée un nouveau commentaire pour l'article $artId * * @param artId identifiant de l'article en question * @param content tableau contenant les valeurs du nouveau commentaire * @return string * @author Florent MONTHEL, Stéphane F **/ public function newCommentaire($artId, $content) { # Hook plugins if (eval($this->plxPlugins->callHook('plxMotorNewCommentaire'))) { return; } if (strtolower($_SERVER['REQUEST_METHOD']) != 'post' or !isset($_SESSION["capcha_token"]) or !isset($_POST['capcha_token']) or $_SESSION["capcha_token"] != $_POST['capcha_token']) { return L_NEWCOMMENT_ERR_ANTISPAM; } # On vérifie que le capcha est correct if ($this->aConf['capcha'] == 0 or $_SESSION['capcha'] == sha1($content['rep'])) { if (!empty($content['name']) and !empty($content['content'])) { # Les champs obligatoires sont remplis $comment = array(); $comment['type'] = 'normal'; $comment['author'] = plxUtils::strCheck(trim($content['name'])); $comment['content'] = plxUtils::strCheck(trim($content['content'])); # On vérifie le mail $comment['mail'] = plxUtils::checkMail(trim($content['mail'])) ? trim($content['mail']) : ''; # On vérifie le site $comment['site'] = plxUtils::checkSite($content['site']) ? $content['site'] : ''; # On récupère l'adresse IP du posteur $comment['ip'] = plxUtils::getIp(); # index du commentaire $idx = $this->nextIdArtComment($idArt); # Commentaire parent en cas de réponse if (isset($content['parent']) and !empty($content['parent'])) { $comment['parent'] = intval($content['parent']); } else { $comment['parent'] = ''; } # On génère le nom du fichier $time = time(); if ($this->aConf['mod_com']) { # On modère le commentaire => underscore $comment['filename'] = '_' . $artId . '.' . $time . '-' . $idx . '.xml'; } else { # On publie le commentaire directement $comment['filename'] = $artId . '.' . $time . '-' . $idx . '.xml'; } # On peut créer le commentaire if ($this->addCommentaire($comment)) { # Commentaire OK if ($this->aConf['mod_com']) { # En cours de modération return 'mod'; } else { # Commentaire publie directement, on retourne son identifiant return 'c' . $artId . '-' . $idx; } } else { # Erreur lors de la création du commentaire return L_NEWCOMMENT_ERR; } } else { # Erreur de remplissage des champs obligatoires return L_NEWCOMMENT_FIELDS_REQUIRED; } } else { # Erreur de vérification capcha return L_NEWCOMMENT_ERR_ANTISPAM; } }
/** * Méthode qui effectue une mise a jour d'un commentaire * * @param content données du commentaire à mettre à jour * @param id identifiant du commentaire * @return string * @author Stephane F. et Florent MONTHEL **/ public function editCommentaire($content, &$id) { # Vérification de la validité de la date de publication if (!plxDate::checkDate($content['day'], $content['month'], $content['year'], $content['time'])) { return plxMsg::Error(L_ERR_INVALID_PUBLISHING_DATE); } $comment = array(); # Génération du nom du fichier $comment['filename'] = $id . '.xml'; if (!file_exists(PLX_ROOT . $this->aConf['racine_commentaires'] . $comment['filename'])) { # Commentaire inexistant return plxMsg::Error(L_ERR_UNKNOWN_COMMENT); } # Contrôle des saisies if (trim($content['mail']) != '' and !plxUtils::checkMail(trim($content['mail']))) { return plxMsg::Error(L_ERR_INVALID_EMAIL); } if (trim($content['site']) != '' and !plxUtils::checkSite($content['site'])) { return plxMsg::Error(L_ERR_INVALID_SITE); } # On récupère les infos du commentaire $com = $this->parseCommentaire(PLX_ROOT . $this->aConf['racine_commentaires'] . $comment['filename']); # Formatage des données $comment['author'] = plxUtils::strCheck(trim($content['author'])); $comment['site'] = plxUtils::strCheck(trim($content['site'])); if ($com['type'] != 'admin') { $comment['content'] = plxUtils::strCheck(trim($content['content'])); } else { $comment['content'] = strip_tags(trim($content['content']), '<a>,<strong>'); } $comment['ip'] = $com['ip']; $comment['type'] = $com['type']; $comment['mail'] = $content['mail']; $comment['site'] = $content['site']; $comment['parent'] = $com['parent']; # Génération du nouveau nom du fichier $time = explode(':', $content['time']); $newtimestamp = mktime($time[0], $time[1], 0, $content['month'], $content['day'], $content['year']); $com = $this->comInfoFromFilename($id . '.xml'); $newid = $com['comStatus'] . $com['artId'] . '.' . $newtimestamp . '-' . $com['comIdx']; $comment['filename'] = $newid . '.xml'; # Suppression de l'ancien commentaire $this->delCommentaire($id); # Création du nouveau commentaire $id = $newid; if ($this->addCommentaire($comment)) { return plxMsg::Info(L_COMMENT_SAVE_SUCCESSFUL); } else { return plxMsg::Error(L_COMMENT_UPDATE_ERR); } }
/** * Méthode qui crée un nouveau commentaire pour l'article $artId * * @param artId identifiant de l'article en question * @param content tableau contenant les valeurs du nouveau commentaire * @return string * @author Florent MONTHEL **/ public function newCommentaire($artId, $content) { # On verifie que le capcha est correct, si besoin est if ($this->aConf['capcha'] == 0 or $content['rep2'] == md5($this->plxCapcha->gds . $content['rep'])) { if (!empty($content['name']) and !empty($content['content'])) { # Les champs obligatoires sont remplis $author = plxUtils::strCheck(trim($content['name'])); $contenu = plxUtils::strCheck(trim($content['content'])); $date = time(); # On verifie le mail $mail = plxUtils::checkMail(trim($content['mail'])) ? trim($content['mail']) : ''; # On verifie le site $site = plxUtils::checkSite(trim($content['site'])) ? trim($content['site']) : ''; # On recupere l'adresse IP du posteur $ip = plxUtils::getIp(); # On genere le nom du fichier selon l'existence ou non d'un fichier du meme nom $i = 0; do { # On boucle en testant l'existence du fichier (cas de plusieurs commentaires/sec pour un article) $i++; if ($this->aConf['mod_com']) { # On modere le commentaire => underscore $filename = PLX_ROOT . $this->aConf['racine_commentaires'] . '_' . $artId . '.' . $date . '-' . $i . '.xml'; } else { # On publie le commentaire directement $filename = PLX_ROOT . $this->aConf['racine_commentaires'] . $artId . '.' . $date . '-' . $i . '.xml'; } } while (file_exists($filename)); # On peut creer le commentaire if ($this->addCommentaire($filename, $author, 'normal', $ip, $mail, $site, $contenu)) { # Commentaire OK if ($this->aConf['mod_com']) { # En cours de moderation return 'mod'; } else { # Commentaire publie directement, on retourne son identifiant return 'c' . $date . '-' . $i; } } else { # Erreur lors de la création du commentaire return 'Une erreur s\'est produite lors de la publication de ce commentaire'; } } else { # Erreur de remplissage des champs obligatoires return 'Merci de remplir tous les champs obligatoires requis'; } } else { # Erreur de verification capcha return 'La vérification anti-spam a échoué'; } }