示例#1
0
 /**
  * Récupère les statistiques des visites
  * @return array Un tableau des statistiques sur les visites
  * @static
  */
 public static function getStat()
 {
     $visiteDAO = new VisiteDAO(BDD::getInstancePDO());
     $arr['total'] = $visiteDAO->getCount();
     $arr['today'] = $visiteDAO->getCountToday();
     $arr['now'] = $visiteDAO->getCountNow();
     return $arr;
 }
示例#2
0
 /**
  * Supprimer un Token
  * @param $id_token L'identifiant du Token à supprimer
  * @return object 2 attributs, bool success et array string msg
  * @static
  */
 public static function dropToken($id_token)
 {
     $std = (object) array('success' => false, 'msg' => array());
     $tokenDAO = new TokenDAO(BDD::getInstancePDO());
     $token = $tokenDAO->getOne($id_token);
     if ($token->id_membre == $_SESSION['user']->id_membre || $_SESSION['user']->groupe == 'Administrateur') {
         if ($tokenDAO->desactiver($id_token)) {
             $std->msg[] = 'Token désactivé';
             $std->success = true;
             return $std;
         } else {
             $std->msg[] = 'Erreur BDD';
         }
     } else {
         $std->msg[] = 'Vous n\'avez pas le droit de supprimer ce token';
     }
     return $std;
 }
示例#3
0
 /**
  * Envoi un email
  * @return object 2 attributs, bool success et array string msg
  */
 public function sendMail()
 {
     $resCheck = $this->check();
     $res = $resCheck;
     if ($resCheck->success === true) {
         $param = array('pseudo' => 'Admin', 'pseudoExpediteur' => $this->pseudo, 'emailExpediteur' => $this->email, 'sujet' => $this->sujet, 'message' => nl2br($this->message));
         $mail = new Mail(DESTINATAIRE_MAIL_CONTACT, '[Technote] Contact', 'mail_contact.twig', $param);
         $resMail = $mail->sendMail();
         $res->success = $resCheck->success && $resMail->success;
         $res->msg = array_merge($res->msg, $resMail->msg);
         if ($resMail->success === true && !empty($_SESSION['user'])) {
             $actionDAO = new ActionDAO(BDD::getInstancePDO());
             $action = new Action(array('id_action' => DAO::UNKNOWN_ID, 'libelle' => 'Contact par formulaire', 'id_membre' => $_SESSION['user']->id_membre));
             $actionDAO->save($action);
         }
     }
     return $res;
 }
示例#4
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;
    }
示例#5
0
 public static function recherche(&$param, $page)
 {
     $std = (object) array('success' => false, 'msg' => array());
     $cond = array();
     $strPagination = '';
     // On construit l'URL pour la pagination, et on construit un tableau pour la requête SQL
     if (!empty($param['titre'])) {
         $cond['titre'] = $param['titre'];
         $strPagination .= '&titre=' . urlencode($param['titre']);
     }
     if (!empty($param['date_debut'])) {
         if (($res = Date::verifierDate($param['date_debut'])) !== true) {
             $std->msg[] = $res . ' (date de début)';
         } else {
             $cond['date_debut'] = $param['date_debut'];
             $strPagination .= '&date_debut=' . $param['date_debut'];
         }
     }
     if (!empty($param['date_fin'])) {
         if (($res = Date::verifierDate($param['date_fin'])) !== true) {
             $std->msg[] = $res . ' (date de fin)';
         } else {
             $cond['date_fin'] = $param['date_fin'];
             $strPagination .= '&date_fin=' . $param['date_fin'];
         }
     }
     if (!empty($param['resolu'])) {
         if ($param['resolu'] != 'oui' && $param['resolu'] != 'non') {
             $std->msg[] = 'Valeur invalide pour le champ résolu';
         } else {
             $cond['resolu'] = $param['resolu'];
             $strPagination .= '&resolu=' . $param['resolu'];
         }
     }
     if (!empty($param['mots_cles'])) {
         // Construit un tableau de mots clés
         $tabMC = explode(',', $param['mots_cles']);
         $tabMCClean = array();
         foreach ($tabMC as $key => $value) {
             // On enlève les espaces de début et de fin
             $valueClean = trim($value);
             if ($valueClean != '') {
                 $tabMCClean[] = $valueClean;
                 // Si le mot clé est obligatoire, on supprime le + de début
                 if ($valueClean[0] == '+') {
                     $valueClean = substr($valueClean, 1);
                 }
                 if (($res = MotCle::checkExisteByLabel($valueClean)) !== true) {
                     $std->msg[] = $res;
                 }
             }
         }
         $cond['mots_cles'] = $tabMCClean;
     }
     // S'il y a des erreurs, on s'arrête
     if (!empty($std->msg)) {
         return $std;
     }
     $questionDAO = new QuestionDAO(BDD::getInstancePDO());
     // On récupère le nombre de questions qu'on a en résultat
     $count = $questionDAO->getQuestionsWithSearch(NB_QUESTIONS_PAGE, $cond, true);
     // On créé la pagination
     $std->pagination = new Pagination($page, $count, NB_QUESTIONS_PAGE, '/questions?recherche=' . $strPagination . '&page=');
     // On récupère les questions
     $std->questions = $questionDAO->getQuestionsWithSearch(NB_QUESTIONS_PAGE, $cond, false, $std->pagination->debut);
     if (empty($std->questions)) {
         $std->msg[] = 'Aucune question avec ces critères';
     } else {
         $std->success = true;
     }
     return $std;
 }
示例#6
0
 public function getAllForOneGroupeTree($id_groupe)
 {
     $res['id_groupe'] = $id_groupe;
     $res['droits'] = $this->getAllForOneGroupe($id_groupe);
     $groupeDAO = new GroupeDAO(BDD::getInstancePDO());
     $groupe = $groupeDAO->getOne($id_groupe);
     if (!empty($groupe->id_groupe_parent)) {
         $res['groupe_parent'] = $this->getAllForOneGroupeTree($groupe->id_groupe_parent);
     }
     return $res;
 }
示例#7
0
 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;
 }
示例#8
0
 /**
  * Vérifie que le mot de passe peut etre modifié par oublie
  * @param array $param Les attributs de la demande de réinitialisation du mot de passe
  * @return object 2 attributs, bool success et array string msg
  * @static
  */
 public static function sendMailLostPass(&$param)
 {
     $resCheck = self::checkSendMailLostPass($param);
     $res = $resCheck;
     if (!isset($resCheck->success)) {
         $membreRes = $resCheck;
         $cle = hash('sha256', uniqid(rand(), true) . SALT_RESET_PASS);
         $membreDAO = new MembreDAO(BDD::getInstancePDO());
         $membre = new membre(array('id_membre' => $membreRes->id_membre, 'cle_reset_pass' => $cle));
         if (($resSave = $membreDAO->save($membre)) !== false) {
             $param = array('pseudo' => $membreRes->pseudo, 'sujet' => 'Oubli de mot de passe', 'cle' => $cle);
             $mail = new Mail($membreRes->email, '[Technote] Oubli de mot de passe', 'mail_lostPass.twig', $param);
             $resMail = $mail->sendMail();
             $res = $resMail;
             if ($resMail->success === true) {
                 $actionDAO = new ActionDAO(BDD::getInstancePDO());
                 $action = new Action(array('id_action' => DAO::UNKNOWN_ID, 'libelle' => 'Oubli de mot de passe (création de la clé)', 'id_membre' => $membreRes->id_membre));
                 $actionDAO->save($action);
                 $res->success = true;
                 $res->msg[0] = 'Un email vous a été envoyé, merci de suivre les instructions';
             }
         } else {
             $res->success = false;
             $res->msg[] = 'Erreur BDD';
         }
     }
     return $res;
 }
示例#9
0
 public static function add(&$param)
 {
     $std = (object) array('success' => false, 'msg' => array());
     if (($res = MotCle::checkLabel($param['label'])) !== true) {
         $std->msg[] = $res;
     }
     if (!empty($std->msg)) {
         return $std;
     }
     // Si c'est un modérateur ou un admin actif, sinon non actif
     $actif = $_SESSION['user']->groupe == 'Administrateur' || $_SESSION['user']->groupe == 'Modérateur' ? 1 : 0;
     $motCle = new MotCle(array('id_mot_cle' => DAO::UNKNOWN_ID, 'label' => $param['label'], 'actif' => $actif));
     $motCleDAO = new MotCleDAO(BDD::getInstancePDO());
     $resSave = $motCleDAO->save($motCle);
     if ($resSave !== false) {
         $std->msg[] = 'Mot clé créer avec succès';
     } else {
         $std->msg[] = 'Erreur BDD';
     }
     $actionDAO = new ActionDAO(BDD::getInstancePDO());
     $action = new Action(array('id_action' => DAO::UNKNOWN_ID, 'libelle' => "Création d\\'un mot clé (mot clé n°{$resSave->id_mot_cle} : {$resSave->label})", 'id_membre' => $_SESSION['user']->id_membre));
     $actionDAO->save($action);
     $std->success = true;
     return $std;
 }
示例#10
0
 public function mots_cles($action, $id, $vars)
 {
     switch ($action) {
         /**** GET ****/
         case 'get':
             $vars['titrePage'] = 'Les mots clés';
             // <h1> de la page
             $motCleDAO = new MotCleDAO(BDD::getInstancePDO());
             $vars['motsCles'] = $motCleDAO->getAllForTable();
             $this->vue->display('admin/motsCles_get_all.twig', $vars);
             exit;
             /**** EDIT ****/
         /**** EDIT ****/
         case 'edit':
             $vars['titrePage'] = 'Modification d\'un mot clé';
             // <h1> de la page
             $motCleDAO = new MotCleDAO(BDD::getInstancePDO());
             $vars['motCle'] = $motCleDAO->getOne($id);
             // Si un formulaire a été envoyé
             if (!empty($_POST)) {
                 // Si le formulaire est valide au niveau faille CSRF
                 if (!empty($_POST['jetonCSRF']) && $_POST['jetonCSRF'] == $_SESSION['jetonCSRF']) {
                     // On essaye de faire les modifications
                     $res = MotCle::edit($_POST, $id);
                     if ($res->success) {
                         $res->redirect = '/admin/mots_cles';
                     }
                     echo json_encode($res);
                     exit;
                 }
             }
             $this->vue->display('admin/motCle_edit.twig', $vars);
             exit;
             /**** DROP ****/
         /**** DROP ****/
         case 'drop':
             if (!empty($_POST)) {
                 // Si le formulaire est valide au niveau faille CSRF
                 if (!empty($_POST['jetonCSRF']) && $_POST['jetonCSRF'] == $_SESSION['jetonCSRF']) {
                     echo json_encode(MotCle::delete($id));
                 }
             }
             exit;
         default:
             $this->vue->display('404.twig', $vars);
             exit;
     }
 }
示例#11
0
    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;
    }
示例#12
0
    /**
     * Vérifie si un cookie de connexion est présent et est valide
     * Si oui remplie la variable de session avec un Membre, sinon session = False et destruction cookie
     */
    public function checkToken()
    {
        if (!empty($_COOKIE['token'])) {
            $req = $this->pdo->prepare('SELECT id_membre
					FROM token T 
					WHERE cle = :token AND date_expiration > NOW() AND actif = 1');
            $req->execute(array('token' => $_COOKIE['token']));
            if ($res = $req->fetch()) {
                $membreDAO = new MembreDAO(BDD::getInstancePDO());
                $_SESSION['user'] = $membreDAO->getOne($res->id_membre);
                // Récupère les doits du groupe du membre
                $droitGroupeDAO = new DroitGroupeDAO(BDD::getInstancePDO());
                $_SESSION['droits']['groupe'] = $droitGroupeDAO->getAllForOneGroupeTree($_SESSION['user']->id_groupe);
                // Récupère les doits du membre
                $droitMembreDAO = new DroitMembreDAO(BDD::getInstancePDO());
                $_SESSION['droits']['membre'] = $droitMembreDAO->getAllForOneMembre($_SESSION['user']->id_membre);
                return;
            }
        }
        setcookie('token', '', time());
        $_SESSION['user'] = false;
    }
示例#13
0
 public function autocomplete($action, $id, $vars)
 {
     switch ($action) {
         case 'get':
             if (!empty($_GET['type']) && !empty($_GET['term'])) {
                 $res = NULL;
                 if ($_GET['type'] == 'motcle') {
                     $motCleDAO = new MotCleDAO(BDD::getInstancePDO());
                     $res = $motCleDAO->getAllComposedOf($_GET['term']);
                 } elseif ($_GET['type'] == 'membre') {
                     $membreDAO = new MembreDAO(BDD::getInstancePDO());
                     $res = $membreDAO->getAllComposedOf($_GET['term']);
                 } elseif ($_GET['type'] == 'titreTechnote') {
                     $technoteDAO = new TechnoteDAO(BDD::getInstancePDO());
                     $res = $technoteDAO->getAllTitreComposedOf($_GET['term']);
                 } elseif ($_GET['type'] == 'titreQuestion') {
                     $questionDAO = new QuestionDAO(BDD::getInstancePDO());
                     $res = $questionDAO->getAllTitreComposedOf($_GET['term']);
                 }
                 echo json_encode($res);
                 exit;
             }
             $this->vue->display('404.twig', $vars);
             exit;
         default:
             $this->vue->display('404.twig', $vars);
             exit;
     }
 }
示例#14
0
    public function getTreeOfOneGroupe($id_groupe)
    {
        $req = $this->pdo->prepare('SELECT *
									FROM groupe
									WHERE id_groupe = :id_groupe');
        $req->execute(array('id_groupe' => $id_groupe));
        $groupeDAO = new GroupeDAO(BDD::getInstancePDO());
        if (($groupe = $req->fetch()) !== false) {
            $groupe->groupe_parent = $groupeDAO->getTreeOfOneGroupe($groupe->id_groupe_parent);
            return new DroitGroupe(get_object_vars($groupe));
        } else {
            return false;
        }
    }
示例#15
0
 private static function checkCommentaireParent(&$id_commentaire_parent, $id_technote)
 {
     if (!empty($id_commentaire_parent)) {
         $commentaireDAO = new CommentaireDAO(BDD::getInstancePDO());
         if (($res = $commentaireDAO->getOne($id_commentaire_parent)) !== false) {
             if ($res->id_technote == $id_technote) {
                 return true;
             } else {
                 return 'Le commentaire parent n\'appartient pas à la même technote';
             }
         } else {
             return 'Le commentaire parent n\'existe pas ou plus';
         }
     }
     $id_commentaire_parent = NULL;
     return true;
 }
示例#16
0
    public function getTreeForOneTechnote($id_technote, $id_commentaire_parent)
    {
        $res = array();
        $op = empty($id_commentaire_parent) ? 'IS' : '=';
        $req = $this->pdo->prepare('SELECT c.*, ma.pseudo auteur, mm.pseudo modificateur 
									FROM commentaire c 
									INNER JOIN membre ma ON ma.id_membre=c.id_auteur 
									LEFT JOIN membre mm ON mm.id_membre=c.id_modificateur 
									WHERE id_technote = :id_technote 
										AND id_commentaire_parent ' . $op . ' :id_commentaire_parent');
        $req->execute(array('id_technote' => $id_technote, 'id_commentaire_parent' => $id_commentaire_parent));
        $commentaireDAO = new CommentaireDAO(BDD::getInstancePDO());
        foreach ($req->fetchAll() as $ligne) {
            $ligne->commentaires = $commentaireDAO->getTreeForOneTechnote($id_technote, $ligne->id_commentaire);
            $res[] = new Commentaire(get_object_vars($ligne));
        }
        return $res;
    }
示例#17
0
require 'Autoloader.php';
Autoloader::Autoload();
// Démarre une session
session_start();
// Connecte le client s'il possède un cookie
$tokenDAO = new TokenDAO(BDD::getInstancePDO());
if (!isset($_SESSION['user'])) {
    $tokenDAO->checkToken();
}
// Si le client n'est pas connecté
if ($_SESSION['user'] === false) {
    // Récupère l'id du groupe Visiteur
    $groupeDAO = new GroupeDAO(BDD::getInstancePDO());
    $groupe = $groupeDAO->getOneByLibelle('Visiteur');
    // Récupère les doits du groupe Visiteur
    $droitGroupeDAO = new DroitGroupeDAO(BDD::getInstancePDO());
    $_SESSION['droits']['groupe'] = $droitGroupeDAO->getAllForOneGroupeTree($groupe->id_groupe);
    $_SESSION['droits']['membre'] = array();
}
// Créé le jeton pour éviter la faille CSRF
if (empty($_SESSION['jetonCSRF'])) {
    $_SESSION['jetonCSRF'] = hash('sha1', uniqid(rand(), true) . SALT_JETON_CSRF);
}
// Enregistre la visite si c'est la premiere de cette heure
$visite = new Visite(array('id_visite' => DAO::UNKNOWN_ID, 'ip' => $_SERVER['REMOTE_ADDR']));
$visite->checkVisite($visite);
// Récupération de l'URL
$controleur = !empty($_GET['url_controleur']) ? ucfirst($_GET['url_controleur']) : 'Main';
$page = !empty($_GET['url_page']) ? $_GET['url_page'] : 'accueil';
$action = !empty($_GET['url_action']) ? $_GET['url_action'] : 'get';
$id = !empty($_GET['url_id']) ? $_GET['url_id'] : NULL;
示例#18
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;
 }