Completed
Pull Request — master (#8)
by Vermeulen
05:22 queued 03:14
created

Routing::detectUri()   D

Complexity

Conditions 16
Paths 182

Size

Total Lines 110
Code Lines 48

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 110
rs 4.5663
cc 16
eloc 48
nc 182
nop 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * Classes gérant le routing
5
 * @author Vermeulen Maxime <[email protected]>
6
 * @version 1.0
7
 */
8
9
namespace BFWCtr;
10
11
/**
12
 * Permet de gérer la vue et de savoir vers quel page envoyer
13
 * @package bfw-controller
14
 */
15
class Routing
16
{
17
    /**
18
     * @var $kernel L'instance du Kernel
19
     */
20
    protected $kernel;
21
    protected $controller;
22
    protected $getArgs = array();
23
24
    public function __construct(&$controller)
25
    {
26
        $this->kernel     = getKernel();
27
        $this->controller = $controller;
28
    }
29
30
    public function detectUri()
31
    {
32
        $returnObj = new \stdClass;
33
34
        $returnObj->fileArbo    = '';
35
        $returnObj->nameCtr     = '';
36
        $returnObj->nameMethode = '';
37
38
        $uriParse = parse_url($_SERVER['REQUEST_URI']);
39
        $request  = rawurldecode($uriParse['path']);
40
41
        if($request[0] === '/')
42
        {
43
            $request = substr($request, 1);
44
        }
45
46
        $exRequest = explode('/', $request);
47
        $link      = $exRequest[0];
48
49
        /*
50
          var_dump($request);
51
          var_dump($exRequest);
52
          var_dump($link);
53
          exit;
54
         */
55
56
        //S'il s'agit de la page index ou racine, on envoi vers la page par défault
57
        if($link == 'index.php' || $link == '')
58
        {
59
            $returnObj->fileArbo = $this->controller->getOptions()->defaultMethode.'.php';
60
            $returnObj->nameCtr  = $this->controller->getOptions()->defaultMethode;
61
62
            return $returnObj;
63
        }
64
65
        $file_find = false; //Indique si le fichier a été trouvé
66
        $dir_find  = false; //Indique si le dossier a été trouvé
67
68
        $dirArbo = '';
69
        $methode = '';
70
71
        foreach($exRequest as $query)
72
        {
73
            //Le fichier à été trouvé
74
            if($file_find)
75
            {
76
                $this->getArgs[] = $query;
77
                continue;
78
            }
79
80
            //Tant qu'on a pas trouvé le fichier
81
82
            if(!empty($dirArbo) && empty($methode))
83
            {
84
                $methode = $query;
85
            }
86
87
            //On rajoute un / à la fin du lien si on a commencé à mettre des choses dessus
88
            if($returnObj->fileArbo != '')
89
            {
90
                $returnObj->fileArbo .= '/';
91
            }
92
93
            $returnObj->fileArbo .= $query; //Et on y rajoute la valeur lu
94
            //Si le fichier existe dans le dossier controller. On passe la $file_find à true
95
            if(file_exists(path_controllers.'/'.$returnObj->fileArbo.'.php'))
96
            {
97
                $returnObj->nameCtr = $returnObj->fileArbo;
98
                $file_find          = true;
99
            }
100
101
            //Si un dossier existe pourtant le nom, on passe $dir_find à true
102
            if(file_exists(path_controllers.'/'.$returnObj->fileArbo))
103
            {
104
                $dir_find = true;
105
                $dirArbo  = $returnObj->fileArbo;
106
            }
107
        }
108
109
        if($file_find == true)
110
        {
111
            $returnObj->fileArbo .= '.php';
112
            
113
            return $returnObj;
114
        }
115
116
        //Si rien a été trouvé, on rajoute "/index" à la fin du lien
117
        if($dir_find == true)
118
        {
119
            $returnObj->nameCtr     = $this->fileArbo;
120
            $returnObj->nameMethode = $methode;
121
122
            if(!(method_exists('\controller\\'.$dirArbo, $methode) && $this->controller->getOptions()->useClass))
123
            {
124
                $returnObj->fileArbo = $dirArbo.'/index.php';
125
                $returnObj->nameCtr  = $dirArbo.'\index';
126
            }
127
128
            return $returnObj;
129
        }
130
131
        $returnObj->nameMethode = $this->controller->getOptions()->defaultMethode;
132
133
        if(isset($exRequest[0]))
134
        {
135
            $returnObj->nameMethode = $exRequest[0];
136
        }
137
138
        return $returnObj;
139
    }
140
141
    public function detectGet()
142
    {
143
        global $_GET;
144
145
        $getId     = 0;
146
        $nbGetArgs = count($this->getArgs);
147
148
        foreach($this->getArgs as $getValue)
149
        {
150
            if($nbGetArgs === ($getId + 1) && trim($getValue) === '')
151
            {
152
                continue;
153
            }
154
155
            $_GET[$getId] = secure(trim($getValue));
156
            $getId++;
157
        }
158
    }
159
}
160