Subversion Repositories Applications.gtt

Rev

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

Rev Author Line No. Line
10 jpm 1
<?php
2
 
11 jpm 3
abstract class aControlleurAction {
37 jpm 4
 
11 jpm 5
    private $suivant;
37 jpm 6
 
11 jpm 7
	public function getRegistre()
10 jpm 8
	{
11 jpm 9
		return Registre::getRegistre();
10 jpm 10
	}
37 jpm 11
 
11 jpm 12
    // Suivant
13
    public function getSuivant()
10 jpm 14
	{
15
		return $this->suivant;
16
	}
37 jpm 17
	public function setSuivant($s, $position = null)
10 jpm 18
	{
19
		if (is_array($s)){
20
			$this->suivant = $s;
21
		} else {
37 jpm 22
			if (!is_null($position)) {
23
				$tab_fin = array_slice($this->suivant, $position);
24
				$tab_deb = array_slice($this->suivant, 0, $position);
25
				$this->suivant = array_merge($tab_deb, array($s), $tab_fin);
26
			} else {
27
				$this->suivant[] = $s;
28
			}
10 jpm 29
		}
30
	}
37 jpm 31
 
11 jpm 32
	public function demarrer()
10 jpm 33
    {
11 jpm 34
		if (!is_null($this->getSuivant())) {
35
			// ATTENTION :
36
			// Il est important de laisser "count($this->getSuivant())" $this->getSuivant() peut varier de taille
10 jpm 37
			for ($i = 0; $i < count($this->getSuivant()) ; $i++) {
37 jpm 38
				//echo '<pre>'.print_r($this->getSuivant(), true).'</pre>';
39
				if ($this->getRegistre()->get('action_finale')) {
104 jpm 40
					// Si l'action met fin au script prématurément nous arrétons
37 jpm 41
					break;
10 jpm 42
				} else {
37 jpm 43
					$liste_actions = $this->getSuivant();
44
					//echo '<pre>'.print_r($liste_actions[$i], true).'</pre>';
45
					if ($liste_actions[$i] instanceof aControlleurAction) {
46
						$liste_actions[$i]->demarrer();
10 jpm 47
					} else {
37 jpm 48
						if (isset($_POST) || isset($_GET)) {
104 jpm 49
							// Méthode "vérifier" générale présente dans aControlleurAction
37 jpm 50
							$this->verifier();
51
							$methode_verif = 'verifier'.$liste_actions[$i];
52
							if (method_exists($this, $methode_verif)) {
104 jpm 53
								// Méthode "vérifier" spécifique à une action
37 jpm 54
								$this->$methode_verif();
55
							}
56
						}
57
						if ($liste_actions[$i] == '__defaut__') {
58
							$methode = 'executer';
59
						} else {
60
							$methode = 'executer'.$liste_actions[$i];
61
						}
62
						if (method_exists($this, $methode)) {
63
							$this->$methode();
64
						} else {
104 jpm 65
							$m = "La méthode $methode de la classe ".get_class($this)." est introuvable!";
37 jpm 66
	    					trigger_error($m, E_USER_ERROR);
67
						}
10 jpm 68
					}
69
				}
70
			}
11 jpm 71
		} else {
72
			$m = "Le registre ne  contient aucune action!";
73
    		trigger_error($m, E_USER_ERROR);
10 jpm 74
		}
75
    }
37 jpm 76
 
11 jpm 77
	public function verifier()
78
    {
79
    	// Nous rassemblons les valeurs du tableau _POST contenant des : dans des sous-tableau de _POST.
80
    	foreach ($_POST as $cle => $val) {
81
    		$morceau = array();
82
    		if (preg_match('/^(.+?)(:.+)+$/', $cle, $morceau)) {
83
    			$table = '';
37 jpm 84
    			foreach (explode(':', trim($morceau[2], ':')) as $c) {
11 jpm 85
    				$table .= '['.$c.']';
86
    			}
87
    			eval('$_POST[$morceau[1]]'.$table.' = $val;');
88
    			unset($_POST[$cle]);
89
    		}
90
    	}
91
    }
10 jpm 92
 
11 jpm 93
    abstract protected function executer();
10 jpm 94
}
95
?>