Redirect   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 85
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Importance

Changes 0
Metric Value
dl 0
loc 85
rs 10
c 0
b 0
f 0
wmc 10
lcom 0
cbo 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A to() 0 14 3
A toAction() 0 4 1
A internal() 0 23 5
A route_to() 0 3 1
1
<?php
2
/**
3
 * KumbiaPHP web & app Framework
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the new BSD license that is bundled
8
 * with this package in the file LICENSE.
9
 *
10
 * @category   Kumbia
11
 * @package    Redirect
12
 *
13
 * @copyright  Copyright (c) 2005 - 2019 KumbiaPHP Team (http://www.kumbiaphp.com)
14
 * @license    https://github.com/KumbiaPHP/KumbiaPHP/blob/master/LICENSE   New BSD License
15
 */
16
/**
17
 * Clase para redireccionar peticiones
18
 *
19
 * @category   Kumbia
20
 * @package    Redirect
21
 */
22
class Redirect
23
{   
24
25
    /**
26
     * Redirecciona la ejecución a otro controlador en un
27
     * tiempo de ejecución determinado
28
     *
29
     * @param string $route ruta a la que será redirigida la petición.
30
     * @param integer $seconds segundos que se esperarán antes de redirigir
31
     * @param integer $statusCode código http de la respuesta, por defecto 302
32
     * 
33
     * @return void
34
     */
35
    public static function to($route = '', $seconds = 0, $statusCode = 302)
36
    {
37
        $route || $route = Router::get('controller_path') . '/';
38
39
        $route = PUBLIC_PATH . ltrim($route, '/');
40
41
        if ($seconds) {
42
            header("Refresh: $seconds; url=$route");
43
            return;
44
        }
45
        header('Location: '.$route, TRUE, $statusCode);
46
        $_SESSION['KUMBIA.CONTENT'] = ob_get_clean();
47
        View::select(null, null);
48
    }
49
50
    /**
51
     * Redirecciona la ejecución a una accion del controlador actual en un
52
     * tiempo de ejecución determinado
53
     *
54
     * @param string $action acción del controlador actual a la que se redirige
55
     * @param integer $seconds segundos que se esperarán antes de redirigir
56
     * @param integer $statusCode código http de la respuesta, por defecto 302
57
     * 
58
     * @return void
59
     */
60
    public static function toAction($action, $seconds = 0, $statusCode = 302)
61
    {
62
        self::to(Router::get('controller_path') . "/$action", $seconds, $statusCode);
63
    }
64
65
    /**
66
     * Enrutamiento interno
67
     * @example
68
     * Redirect::intern("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2")
69
     * 
70
     * @return void
71
     */
72
    public static function internal()
73
    {
74
        static $cyclic = 0;
75
        $url = Util::getParams(func_get_args());
76
        $default = array('controller' => 'index', 'action' => 'index');
77
78
        $url['parameters'] = isset($url['parameters']) ? explode('/', $url['parameters']) : array();
79
        
80
        if (isset($url['module'])) {
81
            $vars = $url + $default;
82
            $vars['controller_path'] = $vars['module'] . '/' . $vars['controller'];
83
        } elseif (isset($url['controller'])) {
84
            $vars = $url + $default;
85
            $vars['controller_path'] = $vars['controller'];
86
        } else {
87
            $vars = $url;
88
        }
89
        
90
        if (++$cyclic > 1000)
91
            throw new KumbiaException('Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad');
92
93
        Router::to($vars, TRUE);
94
    }
95
    /**
96
     * Enrutamiento interno
97
     * @deprecated Se mantiene por legacy temporalmente
98
     * @example
99
     * Redirect::route_to("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2")
100
     * 
101
     * @return void
102
     */
103
    public static function route_to() {
104
        self::internal(func_get_args());
105
    }
106
}
107