예제 #1
0
    /**
     * Effectue une recherche de Technote, ou compte le nombre de résultats pour cette recherche
     * @param      $max Le nombre de technotes 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 technotes
     * @param int  $debut La première technote à récupérer
     * @return array|mixed Les technotes correspondant à la recherche
     */
    public function getTechnotesWithSearch($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 t.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_creation 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_creation 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_creation < :date_fin";
        }
        // Partie auteur
        if (!empty($conditions['auteur'])) {
            $param['auteur'] = $conditions['auteur'];
            $where .= " AND ma.pseudo = :auteur";
        }
        // 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 decrire d WHERE mc.id_mot_cle=d.id_mot_cle AND d.id_technote=t.id_technote))";
            } else {
                $join .= ' LEFT JOIN decrire d ON d.id_technote=t.id_technote';
                $where .= " AND d.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 t.id_technote) nbRes
									FROM technote t
									INNER JOIN membre ma ON ma.id_membre=t.id_auteur
									LEFT JOIN membre mm ON mm.id_membre=t.id_modificateur
									' . $join . '
									WHERE publie = 1 AND visible = 1
									' . $where;
            $req = $this->pdo->prepare($sql);
            $req->execute($param);
            $res = $req->fetch();
            return $res->nbRes;
        }
        $sql = 'SELECT DISTINCT t.*, ma.pseudo auteur, mm.pseudo modificateur
									FROM technote t
									INNER JOIN membre ma ON ma.id_membre=t.id_auteur
									LEFT JOIN membre mm ON mm.id_membre=t.id_modificateur
									' . $join . '
									WHERE publie = 1 AND visible = 1
									' . $where . '
									ORDER BY date_creation DESC
									LIMIT ' . $debut . ', ' . $max;
        // Ne peut pas etre preparé car échapé (LIMIT '9', '0' => FAIL)
        $req = $this->pdo->prepare($sql);
        $req->execute($param);
        foreach ($req->fetchAll() as $ligne) {
            // Recuperation des mot-cles correspondant a la technote
            $decrireDAO = new DecrireDAO(BDD::getInstancePDO());
            $ligne->motsCles = $decrireDAO->getAllForOneTechnote($ligne->id_technote);
            $res[] = new Technote(get_object_vars($ligne));
        }
        return $res;
    }
예제 #2
0
 /**
  * Vérifie et ajoute une technote
  * @param array $param Les attributs de la technotes
  * @return object 2 attributs, bool success et array string msg
  * @static
  */
 public static function addTechnote(&$param, &$files)
 {
     $resCheck = self::checkTechnote($param, $files, 'add');
     $res = $resCheck;
     if ($resCheck->success === true) {
         $technoteDAO = new TechnoteDAO(BDD::getInstancePDO());
         $technote = new Technote(array('id_technote' => DAO::UNKNOWN_ID, 'titre' => $param['titre'], 'contenu' => $param['contenu'], 'id_auteur' => $_SESSION['user']->id_membre, 'url_image' => $param['url_image'], 'description' => $param['description'], 'publie' => $param['publie'], 'visible' => '1'));
         if (($resSaveTechnote = $technoteDAO->save($technote)) !== false) {
             $decrireDAO = new DecrireDAO(BDD::getInstancePDO());
             if (!empty($param['id_mot_cle'])) {
                 foreach ($param['id_mot_cle'] as $id_mot_cle) {
                     $decrire = new Decrire(array('id_technote' => $resSaveTechnote->id_technote, 'id_mot_cle' => $id_mot_cle));
                     $decrireDAO->save($decrire);
                 }
             }
             $actionDAO = new ActionDAO(BDD::getInstancePDO());
             $action = new Action(array('id_action' => DAO::UNKNOWN_ID, 'libelle' => "Ajout d\\'une technote (technote n°{$resSaveTechnote->id_technote})", 'id_membre' => $_SESSION['user']->id_membre));
             $actionDAO->save($action);
             $res->success = true;
             $res->id_technote = $resSaveTechnote->id_technote;
             $res->msg[] = 'Ajout de la technote réussie';
         } else {
             $res->success = false;
             $res->msg[] = 'Erreur BDD';
         }
     }
     return $res;
 }