aboutsummaryrefslogtreecommitdiff
path: root/lib/Minz/Url.php
blob: 17f1ddece745673a8ed9f35207b080a198a37ac8 (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
130
131
132
<?php

/**
 * La classe Url permet de gérer les URL à travers MINZ
 */
class Minz_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) {
		$isArray = is_array($url);

		if ($isArray) {
			$url = self::checkUrl ($url);
		}

		$url_string = '';

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

		if ($isArray) {
			$router = new Minz_Router ();

			if (Minz_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'] != Minz_Request::defaultControllerName ()) {
			$uri .= $separator . 'c=' . $url['c'];
			$separator = $and;
		}
		
		if (isset ($url['a'])
		 && $url['a'] != Minz_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'] = Minz_Request::defaultControllerName ();
			}
			if (!isset ($url['a'])) {
				$url_checked['a'] = Minz_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 Minz_Url::display (array ('c' => $controller, 'a' => $action, 'params' => $params));
}