/**
  * Validate if value does Not Exist in database
  *
  * @param string $value Value of data to be validated
  * @param string $table Name of the table in DB
  * @param string $field Name of field you want to check
  * @return string
  */
 public function testDbNotExist($value, $table, $field, $msg = null)
 {
     //eyes
     //begin
     //$result = Doo::db()->fetchRow("SELECT COUNT($field) AS count FROM " . $table . ' WHERE '.$field.' = ? LIMIT 1', array($value));
     $model = new Model();
     $model->tableName = $table;
     $model->__construct();
     $result = $model->findCount(array($field => $value));
     //if ((isset($result['count'])) && ($result['count'] > 0)) {
     if ($result) {
         //end
         if ($msg !== null) {
             return $msg;
         }
         return 'Same value exists in database.';
     }
 }
Example #2
0
 /**
  * Fonctions qui sera exécutée après la sauvegarde des données
  *
  * @param	array	$datas 			Données à sauvegarder
  * @param	varchar	$saveAction		Type d'action générée par le save
  * @param	boolean	$fromSaveAll 	Indique si l'on arrive de saveAll ou non
  * @access 	public
  * @author 	koéZionCMS
  * @version 0.1 - 23/03/2015 by FI
  * @version 0.2 - 30/03/2015 by FI - Modification gestion de la sauvegarde en passant par un modèle tampon
  * @version 0.3 - 30/03/2015 by FI - Rajout de $fromSaveAll pour indiquer si la clé primaire est sous forme de tableau ou non
  * @version 0.4 - 02/04/2015 by FI - Mise en place du test de la valeur à insérer pour rajouter le cas échéant les données de la langue : if(!is_array($v))
  * @version 0.5 - 20/04/2015 by FI - Correction de la gestion des enregistrements des données traduites pour gérer à la fois le insert et le update
  */
 public function after_save($datas, $saveAction = 'insert', $fromSaveAll = false)
 {
     ////////////////////////////////////////////////
     //    GESTION DE LA TRADUCTION DE LA TABLE    //
     if (isset($this->fieldsToTranslate) && !empty($this->fieldsToTranslate)) {
         //Récupération de l'intersection de clés du tableau de traduction et des données à sauvegarder
         $keysIntersect = array_intersect_key($datas, array_flip($this->fieldsToTranslate));
         //On va tester l'action générée par la requête de sauvegarde pour modifier la valeur de la clée en fonction de l'insert ou de l'update
         //if($saveAction == 'update') { $primaryKey = array('language', 'model_id'); } else { $primaryKey = 'id'; }
         $datasTraduction = array();
         foreach ($keysIntersect as $field => $v) {
             ///////////////////////////
             //    CAS PARTICULIER    //
             //Si $v n'est pas un tableau mais que la table est traduite il faut réorganier les valeurs pour que l'insertion dans la table traduite se fasse correctement
             //Ce cas ce produit par exemple lors de l'ajout d'un nouveau site Internet on ajoute la catégorie racine mais le tableau des champs traduits
             //(en partant du principe que la table des catégories soit traduite) ne comporte pas les données de la langue il faut donc les rajouter à la volée
             //A voir si cette modification ne pose pas plus de problèmes par la suite
             if (!is_array($v)) {
                 $translatedDatas = array();
                 foreach (Session::read('Backoffice.Languages') as $sessionLanguage) {
                     $translatedDatas[$sessionLanguage['code']] = $v;
                 }
             } else {
                 $translatedDatas = $v;
             }
             foreach ($translatedDatas as $language => $languageValue) {
                 $datasTraduction[$language][$field] = $languageValue;
                 $datasTraduction[$language]['language'] = $language;
                 $datasTraduction[$language]['model_id'] = $fromSaveAll ? end($this->id) : $this->id;
                 //On utilise end pour récupérer le dernier élément ajouté au tableau
             }
         }
         if ($datasTraduction) {
             //Pour ne pas perturber le fonctionnement standard du CMS on procède à la création d'un model tampon
             //par lequel on va effectuer nos opération de mise à jour des données traduites
             $i18nModel = new Model();
             $i18nModel->table = $this->table . '_i18n';
             $i18nModel->shema = $this->_get_shema($i18nModel->table);
             //On va parcourir l'ensemble des données pour vérifier si la ligne est présente ou non dans la table
             //Si elle est présente on fait un update sinon on fait un insert
             //L'insert se présente lorsqu'on ajoute une langue après que les données de paramétrage de la traduction soient mises en place
             foreach ($datasTraduction as $language => $languageDatas) {
                 //On compte le nombre de ligne
                 $nbLines = $i18nModel->findCount(array('language' => $languageDatas['language'], 'model_id' => $languageDatas['model_id']));
                 //En fonction du nombre de ligne on change la valeur de la clé primaire pour faire
                 //- Soit un update
                 //- Soit un insert
                 if ($nbLines) {
                     $primaryKey = array('language', 'model_id');
                 } else {
                     $primaryKey = 'id';
                 }
                 $i18nModel->primaryKey = $primaryKey;
                 $i18nModel->save($languageDatas);
             }
             /*if(isset($this->searches_params)) {
             			
             			//$this->make_search_index($datasToSave, $this->id, $saveAction);
             			pr($this->searches_params);
             		}*/
         }
         /*$this->table = $this->table.'_i18n';
         		$this->shema = $this->shema();
         		$this->primaryKey = $primaryKey;*/
     }
 }