/**
  * Permet de convertir un tableau de donnée pour être intégré dans<br>
  * une clause SQL<br>
  * @param string $paramTableName Nom de la table
  * @param array $paramValues tableau clef/donnee où clef est le champs et donnée sa valeur
  * @param string Opérateur ou séparateur SQL 
  * @return string Partie prête à être insérée dans le WHERE d'une requête SQL
  */
 protected static function convertArrayToSqlClause($paramTableName, $paramValues, $paramOperator)
 {
     $operator = " " . $paramOperator . " ";
     $currentOperator = "";
     $statement = "";
     foreach ($paramValues as $key => $value) {
         $statement .= $currentOperator;
         $statement .= self::convertNameToSqlClause($paramTableName) . "." . self::convertNameToSqlClause($key) . " = " . DatabaseOperation::convertDataForQuery($value) . " ";
         $currentOperator = $operator;
     }
     return $statement;
 }
function mysql_table_operation($nom_table, $operation)
{
    /*
     Dictionnaire des variables:
    * **************************
    */
    //$bdd = $_SESSION["mysql_database_name"];                //Variable Globale definit dans /lib/session.php et
    $globalConfig = new GlobalConfig();
    //$conf = $_SESSION["globalConfig"];
    $bdd = $globalConfig->getConf()->getMysqlDatabaseName();
    //$bdd = $conf->mysql_database_name;
    //represente le nom de la base de donnees
    $nom_table;
    //Nom de la table e charger
    $operation;
    //update, delete, rewrite, copy, clone ou insert
    $premiere_virgule_update = 1;
    //Permet de supprimer les virgules en trop dans la
    //construction des requetes UPDATE
    $premiere_virgule_insert = 1;
    //Permet de supprimer les virgules en trop dans la
    //construction des requetes INSERT et REWRITE
    $premiere_operateur_where = 1;
    //Permet de supprimer les AND en trop dans la
    //construction des WHERE
    $premiere_operateur_retour = 1;
    //Permet de supprimer le '&' en trop dans la
    //construction du retour de la fonction
    $return = '';
    //Valeur que renvoi la fonction
    $nom_id = "";
    //$list_key_field = array();    //liste des noms des champs étant des clefs
    /*
     Corps de la fonction
    * *******************
    */
    //Initialisation des requetes
    $req_update = "UPDATE `" . $nom_table . "` SET ";
    $req_where = " WHERE ";
    $req_delete = "DELETE FROM `" . $nom_table . "`";
    $req_insert = "INSERT INTO `" . $nom_table . "` (";
    $req_insert_values = "VALUES (";
    $req_rewrite = $req_delete;
    $req_copy = $req_insert;
    $req_copy_values = $req_insert_values;
    $req_clone;
    //Reste e creer
    //Recupération des variables
    $fields = mysql_list_fields($bdd, $nom_table);
    $propriete = DatabaseOperation::query("DESC {$nom_table}");
    $num_fields = mysql_num_fields($fields);
    //Recherche des clefs de la table
    while ($rows1 = mysql_fetch_array($propriete)) {
        //Creation de la variable potentiellement PRIMARY KEY
        $primary_key = $rows1["Field"];
        //$$primary_key=$_SESSION["$primary_key"];
        //Comment récupérer ce qui vient de l'URL ?
        ${$primary_key} = Lib::isDefined($primary_key);
        if ($rows1["Key"] == "PRI") {
            //Enregistrement de la clef (gestion multi-clef non-supporté)
            $nom_id = $primary_key;
        }
        //Est-ce que ce champ est une clef et qu'une variable est definit
        if ($rows1["Key"] == "PRI" and ${$primary_key} != null) {
            //$list_key_field[]=$nom_id; //Enregistrement du nom de la clef dans la listes des clefs
            //Affectation de la valeur de la variables Key
            if ($operation == 'copy') {
                $_SESSION["{$primary_key}"] = '';
                //$$primary_key = '';
            }
            ${$primary_key} = $_SESSION["{$primary_key}"];
            //Intégration de la clef PRIMAIRE dans les requetes
            $operateur = " AND ";
            if ($premiere_operateur_where) {
                $operateur = '';
            }
            $premiere_operateur_where = 0;
            $req_where .= $operateur . "`" . $primary_key . "`" . "=" . "'" . ${$primary_key} . "'";
            //Construction du lien de retour de fonction
            $operateur = "&";
            if ($premiere_operateur_retour) {
                $operateur = '';
            }
            $premiere_operateur_retour = 0;
            $return .= $operateur . $primary_key . "=" . ${$primary_key};
            //Effacement des clefs pour eviter de les retrouver dans la suite des requetes
            switch ($operation) {
                case 'insert':
                case 'copy':
                    ${$primary_key} = '';
                    break;
            }
        }
        //Fin de Recherche de la clef sur ce champ
    }
    //Fin de recherche des clefs
    //Integration des variables dans les requetes
    for ($i = 0; $i < $num_fields; $i++) {
        //Recuperation du nom des variables
        $nom_variable = mysql_field_name($fields, $i);
        //$valeur_variable = "test";
        //Verification de la declaration de cette variable,
        //$valeur_variable=$_SESSION["$nom_variable"];
        //Comment récupérer ce qui vient de l'URL ?
        //$valeur_variable=Lib::isDefined($nom_variable);
        $valeur_variable = $_SESSION[$nom_variable];
        if ($valeur_variable != null) {
            //Formatage des données pour préparation à intégration dans MySQL
            // 2009-05-11 BS - Fait planter la duplication d'une FTA: $$nom_variable = "\"" . $GLOBALS[$nom_variable] . "\"";
            // 2011-04-01 BS - Tentative pour enregistrer dans la base des données "propre":
            // $valeur_variable = "'" . addslashes($valeur_variable) . "'";
            $valeur_variable = DatabaseOperation::convertDataForQuery($valeur_variable);
            //$$nom_variable = "'" . htmlentities($GLOBALS[$nom_variable]) . "'";
            //Le champs peut-il etre NULL
            $rechercher_not_null = mysql_field_flags($fields, $i);
            $trouver_not_null = stristr($rechercher_not_null, 'not_null');
            if (!$trouver_not_null and $valeur_variable == "''") {
                $valeur_variable = "NULL";
            }
            //Construction des requetes
            //Requete UPDATE
            $virgule = ", ";
            if ($premiere_virgule_update) {
                $virgule = '';
            }
            $premiere_virgule_update = 0;
            $req_update .= $virgule . "`" . $nom_variable . "`=" . $valeur_variable;
            //Requete INSERT, REWRITE et COPY
            $virgule = ", ";
            if ($premiere_virgule_insert) {
                $virgule = '';
            }
            $premiere_virgule_insert = 0;
            $req_insert .= $virgule . "`" . $nom_variable . "`";
            $req_insert_values .= $virgule . $valeur_variable;
        }
    }
    //Fin de la construction des requetes
    //Finalisation des requetes
    //Requete UPDATE:
    $req_update .= $req_where;
    //Requete DELETE:
    $req_delete .= $req_where;
    //Requete INSERT:
    $req_insert .= ")" . $req_insert_values . ");";
    $req_insert . "<br>";
    //Requete REWRITE:
    // un DELETE, puis un INSERT
    //Requete COPY:
    $req_copy = $req_insert;
    //Requete CLONE:
    $req_clone;
    //Execution des requetes
    switch ($operation) {
        case 'update':
            DatabaseOperation::query($req_update);
            //echo $req_update."<br>";
            break;
        case 'delete':
            DatabaseOperation::query($req_delete);
            break;
        case 'insert':
            DatabaseOperation::query($req_insert);
            //echo $req_insert."<br>";
            break;
        case 'rewrite':
            DatabaseOperation::query($req_delete);
            DatabaseOperation::query($req_insert);
            break;
        case 'copy':
            DatabaseOperation::query($req_copy);
            break;
        case 'clone':
            DatabaseOperation::query($req_clone);
            break;
    }
    //Renvoi de la fonction
    switch ($operation) {
        case 'copy':
        case 'insert':
            //$id = "id_" . $nom_table;
            $id = $nom_id;
            //Externalisation de la variable (pour une table e 1 clef)
            $_SESSION[$id] = mysql_insert_id();
            $return = $id . "=" . $_SESSION[$id];
            break;
        default:
            $return;
            break;
    }
    return $return;
}
示例#3
0
 /**
  * Tableau de DatabaseRecord contenant les processus de cycle de vie
  * de la FTA
  * @return array
  */
 public function getArrayIdProcessusFromFtaCycleDeVie()
 {
     $sqlDataEtatAbreviationValue = DatabaseOperation::convertDataForQuery($this->getModelFtaEtat()->getDataField(FtaEtatModel::FIELDNAME_ABREVIATION)->getFieldValue());
     $sqlDataIdFtaCategorieValue = DatabaseOperation::convertDataForQuery($this->getModelFtaWorkflow()->getKeyValue());
     //Sélection de tous les processus appartenant au cycle de vie de la FTA
     return DatabaseOperation::convertSqlStatementWithoutKeyToArray("SELECT DISTINCT " . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . " AS " . FtaProcessusModel::KEYNAME . " " . ", " . FtaProcessusCycleModel::FIELDNAME_DELAI . " " . "FROM " . FtaProcessusCycleModel::TABLENAME . ", " . FtaProcessusModel::TABLENAME . " " . "WHERE " . FtaProcessusCycleModel::FIELDNAME_FTA_ETAT . "=" . $sqlDataEtatAbreviationValue . " " . "AND " . FtaWorkflowModel::KEYNAME . "=" . $sqlDataIdFtaCategorieValue . " " . "AND " . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT . "=" . FtaProcessusModel::KEYNAME . " " . "ORDER BY " . FtaProcessusCycleModel::FIELDNAME_PROCESSUS_INIT);
 }