Subversion Repositories eFlore/Applications.cel

Rev

Rev 418 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 418 Rev 995
1
<?php
1
<?php
2
/**
2
/**
3
* PHP Version 5
3
* PHP Version 5
4
*
4
*
5
* @category  PHP
5
* @category  PHP
6
* @package   jrest
6
* @package   jrest
7
* @author	aurelien <aurelien@tela-botanica.org>
7
* @author	aurelien <aurelien@tela-botanica.org>
8
* @copyright 2009 Tela-Botanica
8
* @copyright 2009 Tela-Botanica
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
9
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
10
* @version   $$id$$
10
* @version   $$id$$
11
* @link	  /doc/jrest/
11
* @link	  /doc/jrest/
12
*/
12
*/
13
 
13
 
14
class JrestService {
14
class JrestService {
15
 
15
 
16
	protected $config;
16
	protected $config;
17
	protected $script_time;
17
	protected $script_time;
18
	protected $max_exec_time;
18
	protected $max_exec_time;
19
 
19
 
20
	public function JrestService($config) {
20
	public function JrestService($config) {
21
		$this->config = config;
21
		$this->config = config;
22
		$this->script_time = microtime(true);
22
		$this->script_time = microtime(true);
23
		$this->max_exec_time = ini_get('max_execution_time');
23
		$this->max_exec_time = ini_get('max_execution_time');
24
	}
24
	}
25
 
25
 
26
	public function isAdmin($id) {
26
	public function isAdmin($id) {
27
		$admins = $this->config['jrest_admin']['admin'];
27
		$admins = $this->config['jrest_admin']['admin'];
28
		$admin_tab = split(',',$admins);
28
		$admin_tab = explode(',',$admins);
29
 
29
 
30
		if (in_array($id,$admin_tab)) {
30
		if (in_array($id,$admin_tab)) {
31
			return true;
31
			return true;
32
		} else {
32
		} else {
33
			return false;
33
			return false;
34
		}
34
		}
35
	}
35
	}
36
 
36
 
37
	public function controleUtilisateur($id) {
37
	public function controleUtilisateur($id) {
38
		if ($_SESSION['user']['name'] == '') {
38
		if ($_SESSION['user']['name'] == '') {
39
			//cas de la session temporaire, on ne fait rien de particulier
39
			//cas de la session temporaire, on ne fait rien de particulier
40
		} else {
40
		} else {
41
			if (!$this->isAdmin($_SESSION['user']['name']) && $_SESSION['user']['name'] != $id) {
41
			if (!$this->isAdmin($_SESSION['user']['name']) && $_SESSION['user']['name'] != $id) {
42
				// cas d'usurpation d'identité
42
				// cas d'usurpation d'identité
43
				print 'Accès interdit';
43
				print 'Accès interdit';
44
				exit();
44
				exit();
45
			}
45
			}
46
		}
46
		}
47
	}
47
	}
48
 
48
 
49
	public function logger($index,$chaine) {
49
	public function logger($index,$chaine) {
50
		if(!class_exists('Log')) {
50
		if(!class_exists('Log')) {
51
			include_once('Log.php');
51
			include_once('Log.php');
52
			Log::getInstance();
52
			Log::getInstance();
53
		}
53
		}
54
 
54
 
55
		Log::setCheminLog($this->config['log']['cheminlog']);
55
		Log::setCheminLog($this->config['log']['cheminlog']);
56
		Log::setTimeZone($this->config['log']['timezone']);
56
		Log::setTimeZone($this->config['log']['timezone']);
57
		Log::setTailleMax($this->config['log']['taillemax']);
57
		Log::setTailleMax($this->config['log']['taillemax']);
58
 
58
 
59
		Log::ajouterEntree($index,$chaine);
59
		Log::ajouterEntree($index,$chaine);
60
	}
60
	}
61
 
61
 
62
	public function verifierOuRelancerExecution() {
62
	public function verifierOuRelancerExecution() {
63
 
63
 
64
		if((microtime(true) - $this->script_time) > ($this->max_exec_time - 5)*100) {
64
		if((microtime(true) - $this->script_time) > ($this->max_exec_time - 5)*100) {
65
			set_time_limit(2);
65
			set_time_limit(2);
66
			$this->logger('JRestService','Durée du script augmentée :'.microtime(true).' - '.$this->script_time.'.) > ('.$this->max_exec_time.' - 5)*1000000');
66
			$this->logger('JRestService','Durée du script augmentée :'.microtime(true).' - '.$this->script_time.'.) > ('.$this->max_exec_time.' - 5)*1000000');
67
			return true;
67
			return true;
68
		}
68
		}
69
		return false;
69
		return false;
70
	}
70
	}
71
	
71
	
72
	/**
72
	/**
73
     * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
73
     * Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
74
     * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
74
     * en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
75
     *
75
     *
76
     * @param String $fichier   le chemin du fichier du squelette
76
     * @param String $fichier   le chemin du fichier du squelette
77
     * @param Array  $donnees   un tableau associatif contenant les variables a injecter dans le squelette.
77
     * @param Array  $donnees   un tableau associatif contenant les variables a injecter dans le squelette.
78
     *
78
     *
79
     * @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
79
     * @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
80
     */
80
     */
81
    public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
81
    public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
82
        $sortie = false;
82
        $sortie = false;
83
        if (file_exists($fichier)) {
83
        if (file_exists($fichier)) {
84
            // Extraction des variables du tableau de données
84
            // Extraction des variables du tableau de données
85
            extract($donnees);
85
            extract($donnees);
86
            // Démarage de la bufferisation de sortie
86
            // Démarage de la bufferisation de sortie
87
            ob_start();
87
            ob_start();
88
            // Si les tags courts sont activés
88
            // Si les tags courts sont activés
89
            if ((bool) @ini_get('short_open_tag') === true) {
89
            if ((bool) @ini_get('short_open_tag') === true) {
90
                // Simple inclusion du squelette
90
                // Simple inclusion du squelette
91
                include $fichier;
91
                include $fichier;
92
            } else {
92
            } else {
93
                // Sinon, remplacement des tags courts par la syntaxe classique avec echo
93
                // Sinon, remplacement des tags courts par la syntaxe classique avec echo
94
                $html_et_code_php = self::traiterTagsCourts($fichier);
94
                $html_et_code_php = self::traiterTagsCourts($fichier);
95
                // Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
95
                // Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
96
                $html_et_code_php = '?>'.$html_et_code_php;
96
                $html_et_code_php = '?>'.$html_et_code_php;
97
                // Interprétation du html et du php dans le buffer
97
                // Interprétation du html et du php dans le buffer
98
                echo eval($html_et_code_php);
98
                echo eval($html_et_code_php);
99
            }
99
            }
100
            // Récupèration du contenu du buffer
100
            // Récupèration du contenu du buffer
101
            $sortie = ob_get_contents();
101
            $sortie = ob_get_contents();
102
            // Suppression du buffer
102
            // Suppression du buffer
103
            @ob_end_clean();
103
            @ob_end_clean();
104
        } else {
104
        } else {
105
            $msg = "Le fichier du squelette '$fichier' n'existe pas.";
105
            $msg = "Le fichier du squelette '$fichier' n'existe pas.";
106
            trigger_error($msg, E_USER_WARNING);
106
            trigger_error($msg, E_USER_WARNING);
107
        }
107
        }
108
        // Retourne le contenu
108
        // Retourne le contenu
109
        return $sortie;
109
        return $sortie;
110
    }
110
    }
111
   
111
   
112
    /**
112
    /**
113
     * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
113
     * Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
114
     *
114
     *
115
     * @param String $chemin_squelette le chemin du fichier du squelette
115
     * @param String $chemin_squelette le chemin du fichier du squelette
116
     *
116
     *
117
     * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
117
     * @return string le contenu du fichier du squelette php avec les tags courts remplacés.
118
     */
118
     */
119
    private static function traiterTagsCourts($chemin_squelette) {
119
    private static function traiterTagsCourts($chemin_squelette) {
120
        $contenu = file_get_contents($chemin_squelette);
120
        $contenu = file_get_contents($chemin_squelette);
121
        // Remplacement de tags courts par un tag long avec echo
121
        // Remplacement de tags courts par un tag long avec echo
122
        $contenu = str_replace('<?=', '<?php echo ',  $contenu);
122
        $contenu = str_replace('<?=', '<?php echo ',  $contenu);
123
        // Ajout systématique d'un point virgule avant la fermeture php
123
        // Ajout systématique d'un point virgule avant la fermeture php
124
        $contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
124
        $contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
125
        return $contenu;
125
        return $contenu;
126
    }
126
    }
127
}
127
}
128
?>
128
?>