Example #1
0
 public static function editQuestion(&$param, $id_question)
 {
     $resCheck = self::check($param);
     $res = $resCheck;
     if ($resCheck->success === true) {
         $questionDAO = new QuestionDAO(BDD::getInstancePDO());
         $question = new Question(array('id_question' => $id_question, 'titre' => $param['titre'], 'question' => $param['question'], 'id_modificateur' => $_SESSION['user']->id_membre, 'resolu' => $param['resolu']));
         if (($resSaveQuestion = $questionDAO->save($question)) !== false) {
             $clarifierDAO = new ClarifierDAO(BDD::getInstancePDO());
             if (!empty($param['id_mot_cle'])) {
                 foreach ($param['id_mot_cle'] as $id_mot_cle) {
                     $clarifier = new Clarifier(array('id_question' => $id_question, 'id_mot_cle' => $id_mot_cle));
                     $clarifierDAO->save($clarifier);
                 }
             }
             $actionDAO = new ActionDAO(BDD::getInstancePDO());
             $action = new Action(array('id_action' => DAO::UNKNOWN_ID, 'libelle' => "Modification d\\'une question (question n°{$id_question})", 'id_membre' => $_SESSION['user']->id_membre));
             $actionDAO->save($action);
             $res->success = true;
             $res->msg[] = 'Modification de la question réussie';
         } else {
             $res->success = false;
             $res->msg[] = 'Erreur BDD';
         }
     }
     return $res;
 }
Example #2
0
    /**
     * 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;
    }