/** * @return \stdClass Objet Contient les informations du profil d'un membre */ public function getProfil() { $tokenDAO = new TokenDAO(BDD::getInstancePDO()); $technoteDAO = new TechnoteDAO(BDD::getInstancePDO()); $commentaireDAO = new CommentaireDAO(BDD::getInstancePDO()); $questionDAO = new QuestionDAO(BDD::getInstancePDO()); $reponseDAO = new ReponseDAO(BDD::getInstancePDO()); $actionDAO = new ActionDAO(BDD::getInstancePDO()); $res = new stdClass(); $res->nbTokenActif = $tokenDAO->getNbActif($this->id_membre); $res->tokenActif = $tokenDAO->getActif($this->id_membre); $res->nbTechnoteRedige = $technoteDAO->getNbRedige($this->id_membre); $res->nbCommentaireRedige = $commentaireDAO->getNbRedige($this->id_membre); $res->nbQuestionRedige = $questionDAO->getNbRedige($this->id_membre); $res->nbReponseRedige = $reponseDAO->getNbRedige($this->id_membre); $res->actions = $actionDAO->getLast($this->id_membre); return $res; }
private static function checkReponseParent(&$id_reponse_parent, $id_technote) { if (!empty($id_reponse_parent)) { $reponseDAO = new ReponseDAO(BDD::getInstancePDO()); if (($res = $reponseDAO->getOne($id_reponse_parent)) !== false) { if ($res->id_question == $id_technote) { return true; } else { return 'La réponse parent n\'appartient pas à la même question'; } } else { return 'La réponse parent n\'existe pas ou plus'; } } $id_reponse_parent = NULL; return true; }
public function getTreeForOneQuestion($id_question, $id_reponse_parent) { $res = array(); $op = empty($id_reponse_parent) ? 'IS' : '='; $req = $this->pdo->prepare('SELECT r.*, ma.pseudo auteur, mm.pseudo modificateur FROM reponse r INNER JOIN membre ma ON ma.id_membre=r.id_auteur LEFT JOIN membre mm ON mm.id_membre=r.id_modificateur WHERE id_question = :id_question AND id_reponse_parent ' . $op . ' :id_reponse_parent'); $req->execute(array('id_question' => $id_question, 'id_reponse_parent' => $id_reponse_parent)); $reponseDAO = new ReponseDAO(BDD::getInstancePDO()); foreach ($req->fetchAll() as $ligne) { $ligne->reponses = $reponseDAO->getTreeForOneQuestion($id_question, $ligne->id_reponse); $res[] = new Reponse(get_object_vars($ligne)); } return $res; }
/** * Effectue une recherche de Question, ou compte le nombre de résultats pour cette recherche * @param $max Le nombre de question par page * @param $conditions Le tableau contenant les parametres de recherche * @param bool $count True si c'est pour avoir le nombre de résultat (pagination), false si c'est pour avoir les questions * @param int $debut La première question à récupérer * @return array|mixed Les questions correspondant à la recherche */ public function getQuestionsWithSearch($max, $conditions, $count = false, $debut = 0) { $res = array(); $where = ''; $join = ''; $param = array(); // Partie titre technote if (!empty($conditions['titre'])) { $param['titre'] = '%' . $conditions['titre'] . '%'; $where .= " AND q.titre LIKE :titre"; } // Partie date if (!empty($conditions['date_debut']) && !empty($conditions['date_fin'])) { $conditions['date_debut'] .= ' 00:00:00'; $conditions['date_fin'] .= ' 23:59:59'; $param['date_debut'] = $conditions['date_debut']; $param['date_fin'] = $conditions['date_fin']; $where .= " AND date_question BETWEEN :date_debut AND :date_fin"; } elseif (!empty($conditions['date_debut'])) { $conditions['date_debut'] .= ' 00:00:00'; $param['date_debut'] = $conditions['date_debut']; $where .= " AND date_question BETWEEN :date_debut AND NOW()"; } elseif (!empty($conditions['date_fin'])) { $conditions['date_fin'] .= ' 23:59:59'; $param['date_fin'] = $conditions['date_fin']; $where .= " AND date_question < :date_fin"; } // Partie auteur if (!empty($conditions['resolu'])) { $param['resolu'] = $conditions['resolu'] == 'oui' ? '1' : '0'; $where .= " AND resolu = :resolu"; } // Partie mots clés if (!empty($conditions['mots_cles'])) { $sqlMCObligatoire = ''; $sqlMCNonObligatoire = ''; foreach ($conditions['mots_cles'] as $mc) { if ($mc[0] == '+') { $sqlMCObligatoire .= '\'' . substr($mc, 1) . '\', '; // On enleve le + pour la requete } else { $sqlMCNonObligatoire .= '\'' . $mc . '\', '; } } $sqlMCObligatoire = substr($sqlMCObligatoire, 0, -2); $sqlMCNonObligatoire = substr($sqlMCNonObligatoire, 0, -2); if (!empty($sqlMCObligatoire)) { $where .= " AND NOT EXISTS(SELECT id_mot_cle FROM mot_cle mc WHERE label IN ({$sqlMCObligatoire}) AND NOT EXISTS(SELECT * FROM clarifier c WHERE mc.id_mot_cle=c.id_mot_cle AND c.id_question=q.id_question))"; } else { $join .= ' LEFT JOIN clarifier c ON c.id_question=q.id_question'; $where .= " AND c.id_mot_cle IN(SELECT id_mot_cle FROM mot_cle WHERE label IN({$sqlMCNonObligatoire}))"; } } // Si c'est pour savoir le nombre de résultats (pagination) if ($count) { $sql = 'SELECT COUNT(DISTINCT q.id_question) nbRes FROM question q INNER JOIN membre ma ON ma.id_membre=q.id_auteur LEFT JOIN membre mm ON mm.id_membre=q.id_modificateur ' . $join . ' WHERE visible = 1 ' . $where; $req = $this->pdo->prepare($sql); $req->execute($param); $res = $req->fetch(); return $res->nbRes; } $sql = 'SELECT DISTINCT q.*, ma.pseudo auteur, mm.pseudo modificateur FROM question q INNER JOIN membre ma ON ma.id_membre=q.id_auteur LEFT JOIN membre mm ON mm.id_membre=q.id_modificateur ' . $join . ' WHERE visible = 1 ' . $where . ' ORDER BY date_question DESC LIMIT ' . $debut . ', ' . $max; // Ne peut pas etre preparé car échapé (LIMIT '10', '0' => FAIL) $req = $this->pdo->prepare($sql); $req->execute($param); foreach ($req->fetchAll() as $ligne) { // On recupere le nombre de réponses $reponseDAO = new ReponseDAO(BDD::getInstancePDO()); $ligne->nbReponses = $reponseDAO->getCountForOneQuestion($ligne->id_question); $ligne->lastReponse = $reponseDAO->getLastForOneQuestion($ligne->id_question); // Recuperation des mot-cles correspondant a la question $clarifierDAO = new ClarifierDAO(BDD::getInstancePDO()); $ligne->motsCles = $clarifierDAO->getAllForOneQuestion($ligne->id_question); $res[] = new Question(get_object_vars($ligne)); } return $res; }