1 <?php
 2 
 3 /**
 4  * URL Funktionen.
 5  *
 6  * @package redaxo\structure
 7  */
 8 
 9 /**
10  * Gibt eine Url zu einem Artikel zurück.
11  *
12  * @param int|string|null $id
13  * @param int|string|null $clang     SprachId des Artikels
14  * @param array           $params    Array von Parametern
15  * @param string          $separator
16  *
17  * @return string
18  *
19  * @package redaxo\structure
20  */
21 function rex_getUrl($id = null, $clang = null, array $params = [], $separator = '&amp;')
22 {
23     $id = (int) $id;
24     $clang = (int) $clang;
25 
26     // ----- get id
27     if ($id == 0) {
28         $id = rex_article::getCurrentId();
29     }
30 
31     // ----- get clang
32     // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben!
33     // Die rexExtension muss selbst entscheiden was sie damit macht
34     if (!rex_clang::exists($clang) && (rex_clang::count() > 1 || rex_extension::isRegistered('URL_REWRITE'))) {
35         $clang = rex_clang::getCurrentId();
36     }
37 
38     // ----- EXTENSION POINT
39     $url = rex_extension::registerPoint(new rex_extension_point('URL_REWRITE', '', ['id' => $id, 'clang' => $clang, 'params' => $params, 'separator' => $separator]));
40 
41     if ($url == '') {
42         if (rex_clang::count() > 1) {
43             $clang = $separator . 'clang=' . $clang;
44         } else {
45             $clang = '';
46         }
47 
48         $params = rex_string::buildQuery($params, $separator);
49         $params = $params ? $separator . $params : '';
50 
51         $url = rex_url::frontendController() . '?article_id=' . $id . $clang . $params;
52     }
53 
54     return $url;
55 }
56 
57 /**
58  * Leitet auf einen anderen Artikel weiter.
59  *
60  * @param null|int|string $article_id
61  * @param null|int|string $clang      SprachId des Artikels
62  *
63  * @throws InvalidArgumentException
64  *
65  * @package redaxo\structure
66  */
67 function rex_redirect($article_id, $clang = null, array $params = [])
68 {
69     if (null !== $article_id && '' !== $article_id && !is_int($article_id) && $article_id !== (string) (int) $article_id) {
70         throw new InvalidArgumentException(sprintf('"%s" is not a valid article_id!', $article_id));
71     }
72 
73     rex_response::sendRedirect(rex_getUrl($article_id, $clang, $params, '&'));
74 }
75