/** * 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.'; } }
/** * 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;*/ } }