summaryrefslogtreecommitdiff
path: root/app/Helper/Url.php
blob: 8de63f8d444a69e0f52d16ddd8efef90b8b4f77d (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
<?php

namespace Helper;

use Core\Request;
use Core\Security;

/**
 * Url helpers
 *
 * @package helper
 * @author  Frederic Guillot
 */
class Url extends \Core\Base
{
    /**
     * HTML Link tag
     *
     * @access public
     * @param  string   $label       Link label
     * @param  string   $controller  Controller name
     * @param  string   $action      Action name
     * @param  array    $params      Url parameters
     * @param  boolean  $csrf        Add a CSRF token
     * @param  string   $class       CSS class attribute
     * @param  boolean  $new_tab     Open the link in a new tab
     * @param  string   $anchor      Link Anchor
     * @return string
     */
    public function link($label, $controller, $action, array $params = array(), $csrf = false, $class = '', $title = '', $new_tab = false, $anchor = '')
    {
        return '<a href="'.$this->href($controller, $action, $params, $csrf, $anchor).'" class="'.$class.'" title="'.$title.'" '.($new_tab ? 'target="_blank"' : '').'>'.$label.'</a>';
    }

    /**
     * Hyperlink
     *
     * @access public
     * @param  string   $controller  Controller name
     * @param  string   $action      Action name
     * @param  array    $params      Url parameters
     * @param  boolean  $csrf        Add a CSRF token
     * @param  string   $anchor      Link Anchor
     * @return string
     */
    public function href($controller, $action, array $params = array(), $csrf = false, $anchor = '')
    {
        $values = array(
            'controller' => $controller,
            'action' => $action,
        );

        if ($csrf) {
            $params['csrf_token'] = Security::getCSRFToken();
        }

        $values += $params;

        return '?'.http_build_query($values, '', '&amp;').(empty($anchor) ? '' : '#'.$anchor);
    }

    /**
     * Generate controller/action url
     *
     * @access public
     * @param  string   $controller  Controller name
     * @param  string   $action      Action name
     * @param  array    $params      Url parameters
     * @return string
     */
    public function to($controller, $action, array $params = array())
    {
        $values = array(
            'controller' => $controller,
            'action' => $action,
        );

        $values += $params;

        return '?'.http_build_query($values, '', '&');
    }

    /**
     * Get application base url
     *
     * @access public
     * @return string
     */
    public function base()
    {
        return $this->config->get('application_url') ?: $this->server();
    }

    /**
     * Get current server base url
     *
     * @access public
     * @return string
     */
    public function server()
    {
        if (empty($_SERVER['SERVER_NAME'])) {
            return 'http://localhost/';
        }

        $self = str_replace('\\', '/', dirname($_SERVER['PHP_SELF']));

        $url = Request::isHTTPS() ? 'https://' : 'http://';
        $url .= $_SERVER['SERVER_NAME'];
        $url .= $_SERVER['SERVER_PORT'] == 80 || $_SERVER['SERVER_PORT'] == 443 ? '' : ':'.$_SERVER['SERVER_PORT'];
        $url .= $self !== '/' ? $self.'/' : '/';

        return $url;
    }
}