Subversion Repositories Applications.referentiel

Rev

Rev 51 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
51 jpm 1
<?php
2
/**
3
 * Service réalisant l'archivage d'une version de travail d'un référentiel.
4
 * Encodage en entrée : utf8
5
 * Encodage en sortie : utf8
6
 *
7
 * @category	Php 5.2
8
 * @package	Referentiel
9
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
10
 * @license	GPL v3 <http://www.gnu.org/licenses/gpl.txt>
11
 * @license	CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
12
 * @copyright	2010 Tela-Botanica
13
 * @version	$Id$
14
 */
15
class ArchiverReferentiel extends Ref {
16
 
17
	/**
18
	 * Méthode appelée pour ajouter des méta-données à un référentiel.
19
	 * Retour l'id du nouvel enregistrement ou false!
20
	 */
21
	public function createElement($params_post) {
22
		$params_attendus = array('code', 'version');
23
		$params_proteges = $this->traiterParametresPost($params_attendus, $params_post);
24
		$nom_table_origine = strtolower($params_post['code']);
25
		$nom_table_copie = strtolower($params_post['code']).'_v'.str_replace('.', '_', $params_post['version']);
26
 
27
		$retour = false;
28
		try {
29
			$requete = "SHOW CREATE TABLE `$nom_table_origine`";
30
 
31
			$resultat = $this->bdd->query($requete)->fetch(PDO::FETCH_ASSOC);
32
			if ($resultat === false) {
33
				$this->debug[] = "La récupération de la commande sql de création de la table d'archive a échoué.";
34
			} else {
35
				$requete = $resultat['Create Table'];
36
				$requete = str_replace($nom_table_origine, $nom_table_copie, $requete);
37
 
38
				$resultat = $this->bdd->exec($requete);
39
				if ($resultat === false) {
40
					$this->debug[] = "La création de la structure de la table d'archive a échoué.";
41
				} else {
42
					$requete = "INSERT INTO `$nom_table_copie` SELECT * FROM `$nom_table_origine`";
43
					$resultat = $this->bdd->exec($requete);
44
					if ($resultat === false) {
45
						$this->debug[] = "La copie des données a échoué.";
46
					} else {
47
						$retour = true;
48
					}
49
				}
50
			}
51
		} catch (PDOException $e) {
52
			$this->messages[] = sprintf($this->getTxt('sql_erreur'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
53
		}
54
 
55
	   	$this->envoyer($retour);
56
	}
57
}