summaryrefslogtreecommitdiff
path: root/lib/minz/Url.php
blob: ce051ebd9d4548a5421317f5d0f62563c6e7c229 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php

/**
 * La classe Url permet de gérer les URL à travers MINZ
 */
class Url {
	/**
	 * Affiche une Url formatée selon que l'on utilise l'url_rewriting ou non
	 * si oui, on cherche dans la table de routage la correspondance pour formater
	 * @param $url l'url à formater définie comme un tableau :
	 *                    $url['c'] = controller
	 *                    $url['a'] = action
	 *                    $url['params'] = tableau des paramètres supplémentaires
	 *                    $url['protocol'] = protocole à utiliser (http par défaut)
	 *             ou comme une chaîne de caractère
	 * @param $encodage pour indiquer comment encoder les & (& ou &amp; pour html)
	 * @return l'url formatée
	 */
	public static function display ($url = array (), $encodage = 'html', $absolute = false) {
		$url = self::checkUrl ($url);

		$url_string = '';

		if ($absolute) {
			if (is_array ($url) && isset ($url['protocol'])) {
				$protocol = $url['protocol'];
			} elseif (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
				$protocol = 'https:';
			} else {
				$protocol = 'http:';
			}
			$url_string = $protocol . '//' . Request::getDomainName () . Request::getBaseUrl ();
		}
		else {
			$url_string = '.';
		}

		if (is_array ($url)) {
			$router = new Router ();

			if (Configuration::useUrlRewriting ()) {
				$url_string .= $router->printUriRewrited ($url);
			} else {
				$url_string .= self::printUri ($url, $encodage);
			}
		} else {
			$url_string .= $url;
		}

		return $url_string;
	}
	
	/**
	 * Construit l'URI d'une URL sans url rewriting
	 * @param l'url sous forme de tableau
	 * @param $encodage pour indiquer comment encoder les & (& ou &amp; pour html)
	 * @return l'uri sous la forme ?key=value&key2=value2
	 */
	private static function printUri ($url, $encodage) {
		$uri = '';
		$separator = '/?';
		
		if($encodage == 'html') {
			$and = '&amp;';
		} else {
			$and = '&';
		}
		
		if (isset ($url['c'])
		 && $url['c'] != Request::defaultControllerName ()) {
			$uri .= $separator . 'c=' . $url['c'];
			$separator = $and;
		}
		
		if (isset ($url['a'])
		 && $url['a'] != Request::defaultActionName ()) {
			$uri .= $separator . 'a=' . $url['a'];
			$separator = $and;
		}
		
		if (isset ($url['params'])) {
			foreach ($url['params'] as $key => $param) {
				$uri .= $separator . $key . '=' . $param;
				$separator = $and;
			}
		}
		
		return $uri;
	}
	
	/**
	 * Vérifie que les éléments du tableau représentant une url soit ok
	 * @param l'url sous forme de tableau (sinon renverra directement $url)
	 * @return l'url vérifié
	 */
	public static function checkUrl ($url) {
		$url_checked = $url;
		
		if (is_array ($url)) {
			if (!isset ($url['c'])) {
				$url_checked['c'] = Request::defaultControllerName ();
			}
			if (!isset ($url['a'])) {
				$url_checked['a'] = Request::defaultActionName ();
			}
			if (!isset ($url['params'])) {
				$url_checked['params'] = array ();
			}
		}
		
		return $url_checked;
	}
}

function _url ($controller, $action) {
	$nb_args = func_num_args ();

	if($nb_args < 2 || $nb_args % 2 != 0) {
		return false;
	}

	$args = func_get_args ();
	$params = array ();
	for($i = 2; $i < $nb_args; $i = $i + 2) {
		$params[$args[$i]] = $args[$i + 1];
	}

	return Url::display (array ('c' => $controller, 'a' => $action, 'params' => $params));
}