Beispiel #1
0
 /**
  * Populates a new bug's data with all table's columns with defaults
  */
 private function initNewBug()
 {
     $this->bugID = Liste::getAIval($this->bugInfos->getTable());
     foreach (Liste::getCols($this->bugInfos->getTable()) as $col) {
         $val = '';
         if ($col === 'id') {
             $val = $this->bugID;
         }
         if ($col === 'date') {
             $val = date('Y-m-d H:i:s');
         }
         if ($col === 'author') {
             $val = 'Admin';
         }
         if ($col === 'priority') {
             $val = 4;
         }
         if ($col === 'closed') {
             $val = 0;
         }
         if ($col === 'FK_comment_ID') {
             $val = '[]';
         }
         $this->bugData[$col] = $val;
     }
 }
Beispiel #2
0
 /**
  * MISE À JOUR (SAVE) d'une entrée dans la table courante
  * @param STRING $filterKey Le nom de la colonne à utiliser pour identifier l'entrée (default 'id')
  * @param STRING $filterVal L'identifiant à utiliser (default 'this' -> correspond à l'entrée actuelle)
  * @param BOOLEAN $addCol TRUE pour ajouter la(les) colonne(s) si elle(s) n'existe(nt) pas
  * @param STRING $autoDate TRUE pour mettre à jour le champ de dernière modification avec la date courante, et la date de création dans le cas d'un INSERT, si la colonne est présente. (default TRUE)
  * @return STRING Le type de requête SQL qui vient d'être utilisée pour le save ('UPDATE', ou 'INSERT')
  */
 public function save($filterKey = 'id', $filterVal = 'this', $addCol = true, $autoDate = true)
 {
     if (!$this->bddCx || !is_object($this->bddCx)) {
         $this->initPDO();
     }
     // si pas d'argument on utilise l'entrée courante
     if ($filterVal == 'this') {
         $filterVal = @$this->data[$filterKey];
     }
     // Mise à jour d'une éventuelle colonne de date de last modif (la constante de config LAST_UPDATE doit être définie)
     if ($autoDate && defined("LAST_UPDATE") && LAST_UPDATE !== false) {
         $this->data[LAST_UPDATE] = date("Y-m-d H:i:s");
     }
     // Vérifie si tous les champs existent, sinon crée le champ à la volée
     if ($addCol) {
         $this->checkMissingCols();
     }
     // Construction de la chaine des clés et valeurs SQL pour la requête
     $keys = '';
     $vals = '';
     $up = '';
     foreach ($this->data as $k => $v) {
         if (is_array($v)) {
             $v = json_encode($v, JSON_UNESCAPED_SLASHES + JSON_UNESCAPED_UNICODE + JSON_NUMERIC_CHECK);
         }
         if (is_string($v)) {
             $v = addslashes($v);
         }
         $keys .= "`{$k}`, ";
         $vals .= "'{$v}', ";
         $up .= "`{$k}`='{$v}', ";
     }
     $keys = rtrim($keys, ', ');
     $vals = rtrim($vals, ', ');
     $up = rtrim($up, ', ');
     // Update de l'entrée si chargée en mémoire
     if ($this->loaded) {
         $req = "UPDATE `{$this->table}` SET {$up} WHERE `{$filterKey}` LIKE '{$filterVal}'";
     } else {
         // Insertion de l'entrée si nouvelle
         $req = "INSERT INTO `{$this->table}` ({$keys}) VALUES ({$vals})";
         // Ajout de la date de création (si la colonne est présente) (la constante de config DATE_CREATION doit être définie)
         if ($autoDate && defined("DATE_CREATION") && DATE_CREATION !== false) {
             $this->data[DATE_CREATION] = date("Y-m-d H:i:s");
         }
         $nextid = Liste::getAIval($this->table);
     }
     // Sauvegarde en base de données
     $q = $this->bddCx->prepare($req);
     try {
         $q->execute();
     } catch (Exception $e) {
         $msg = $e->getMessage();
         if ($e->getCode() == 23000) {
             $keyOffset = strrpos($msg, "'", -2);
             $key = substr($msg, $keyOffset);
             throw new Exception("Infos::save() : Duplicate entry for '{$key}' in table '{$this->table}'.");
         } else {
             throw new Exception("Infos::save(), table '{$this->table}' -> {$msg}");
         }
     }
     if (@$nextid) {
         $this->data['id'] = (int) $nextid;
     }
     $this->loaded = true;
     $err = $q->errorInfo();
     if ($err[0] == 0) {
         return substr($req, 0, 6);
     } else {
         throw new Exception('Infos::save() : ' . $err[2]);
     }
 }