Completed
Push — develop ( 8d2e7b...6184bf )
by Mohamed
10:12
created

RouteServiceProvider::map()   B

Complexity

Conditions 4
Paths 1

Size

Total Lines 107
Code Lines 69

Duplication

Lines 16
Ratio 14.95 %

Code Coverage

Tests 70
CRAP Score 4

Importance

Changes 8
Bugs 0 Features 0
Metric Value
c 8
b 0
f 0
dl 16
loc 107
ccs 70
cts 70
cp 1
rs 8.1935
cc 4
eloc 69
nc 1
nop 1
crap 4

How to fix   Long Method   

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
 * This file is part of the Tinyissue package.
5
 *
6
 * (c) Mohamed Alsharaf <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Tinyissue\Providers;
13
14
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
15
use Illuminate\Routing\Router;
16
17
/**
18
 * RouteServiceProvider is the route service provider for registering the application routes to controllers and actions.
19
 *
20
 * @author Mohamed Alsharaf <[email protected]>
21
 */
22
class RouteServiceProvider extends ServiceProvider
23
{
24
    /**
25
     * This namespace is applied to the controller routes in your routes file.
26
     *
27
     * In addition, it is set as the URL generator's root namespace.
28
     *
29
     * @var string
30
     */
31
    protected $namespace = 'Tinyissue\Http\Controllers';
32
33
    /**
34
     * Define your route model bindings, pattern filters, etc.
35
     *
36
     * @param \Illuminate\Routing\Router $router
37
     */
38 62
    public function boot(Router $router)
39
    {
40 62
        $router->model('project', 'Tinyissue\Model\Project');
41 62
        $router->model('issue', 'Tinyissue\Model\Project\Issue');
42 62
        $router->model('attachment', 'Tinyissue\Model\Project\Issue\Attachment');
43 62
        $router->model('comment', 'Tinyissue\Model\Project\Issue\Comment');
44 62
        $router->model('note', 'Tinyissue\Model\Project\Note');
45 62
        $router->model('tag', 'Tinyissue\Model\Tag');
46 62
        $router->model('user', 'Tinyissue\Model\User');
47
48 62
        $router->pattern('project', '[0-9]+');
49 62
        $router->pattern('issue', '[0-9]+');
50 62
        $router->pattern('comment', '[0-9]+');
51 62
        $router->pattern('issue', '[0-9]+');
52 62
        $router->pattern('limit', '[0-9]+');
53 62
        $router->pattern('attachment', '[0-9]+');
54 62
        $router->pattern('note', '[0-9]+');
55 62
        $router->pattern('term', '\w+');
56 62
        $router->pattern('tag', '[0-9]+');
57
58 62
        parent::boot($router);
59 62
    }
60
61
    /**
62
     * Define the routes for the application.
63
     *
64
     * @param Router $router
65
     */
66 62
    public function map(Router $router)
67
    {
68
        $router->group(['namespace' => $this->namespace], function (Router $router) {
69 62
            $router->get('/', 'HomeController@getIndex');
70 62
            $router->get('logout', 'HomeController@getLogout');
71 62
            $router->post('signin', 'HomeController@postSignin');
72
73 62
            if (app('tinyissue.settings')->isPublicProjectsEnabled()) {
74 5
                $this->addPublicRoutes($router);
75
            }
76
77
            $router->group(['middleware' => 'auth'], function (Router $router) {
78 62
                $router->get('dashboard', 'HomeController@getDashboard');
79
80
                // Login user area
81 62
                $router->get('user/issues/{display?}/{project?}', 'UserController@getIssues');
82 62
                $router->get('user/settings/messages', 'UserController@getMessagesSettings');
83 62
                $router->post('user/settings/messages', 'UserController@postMessagesSettings');
84 62
                $router->controller('user', 'UserController');
85
86
                // Projects area
87 62
                if (!app('tinyissue.settings')->isPublicProjectsEnabled()) {
88 59
                    $this->addPublicProjectsRoutes($router);
89
                }
90 62
                $router->get('projects/new_issue', 'ProjectsController@getNewIssue');
91 62
                $router->post('projects/new_issue', 'ProjectsController@postNewIssue');
92
                $router->group(['middleware' => 'permission', 'permission' => 'project-create'], function (Router $router) {
93 62
                    $router->get('projects/new', 'ProjectsController@getNew');
94 62
                    $router->post('projects/new', 'ProjectsController@postNew');
95 62
                });
96
97
                $router->group(['middleware' => 'project'], function (Router $router) {
98 62
                    if (!app('tinyissue.settings')->isPublicProjectsEnabled()) {
99 59
                        $this->addPublicProjectRoutes($router);
100
                    }
101
102
                    // View project
103 62
                    $router->get('project/{project}/assigned', 'ProjectController@getAssigned');
104 62
                    $router->get('project/{project}/created', 'ProjectController@getCreated');
105
106
                    // Edit project
107
                    $router->group(['middleware' => 'permission', 'permission' => 'project-modify'], function (Router $router) {
108 62
                        $router->get('project/{project}/edit', 'ProjectController@getEdit');
109 62
                        $router->post('project/{project}/edit', 'ProjectController@postEdit');
110 62
                        $router->get('project/inactive_users/{project?}', ['middleware' => 'ajax', 'uses' => 'ProjectController@getInactiveUsers']);
111 62
                        $router->post('project/{project}/unassign_user', ['middleware' => 'ajax', 'uses' => 'ProjectController@postUnassign']);
112 62
                        $router->post('project/{project}/assign_user', ['middleware' => 'ajax', 'uses' => 'ProjectController@postAssign']);
113 62
                        $router->post('project/{project}/export_issues', ['middleware' => 'ajax', 'uses' => 'ProjectController@postExportIssues']);
114 62
                        $router->get('project/{project}/download_export/{file}', ['uses' => 'ProjectController@getDownloadExport']);
115
116
                        // Edit project notes
117 62
                        $router->post('project/{project}/edit_note/{note}', ['middleware' => 'ajax', 'uses' => 'ProjectController@postEditNote']);
118 62
                        $router->get('project/{project}/delete_note/{note}', ['middleware' => 'ajax', 'uses' => 'ProjectController@getDeleteNote']);
119 62
                        $router->post('project/{project}/add_note', 'ProjectController@postAddNote');
120 62
                    });
121
122
                    // Add issue
123
                    $router->group(['middleware' => 'permission', 'permission' => 'issue-create'], function (Router $router) {
124 62
                        $router->get('project/{project}/issue/new', 'Project\IssueController@getNew');
125 62
                        $router->post('project/{project}/issue/new', 'Project\IssueController@postNew');
126 62
                    });
127
128
                    // Edit issue
129 View Code Duplication
                    $router->group(['middleware' => 'permission', 'permission' => 'issue-modify'], function (Router $router) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
130 62
                        $router->get('project/{project}/issue/{issue}/edit', 'Project\IssueController@getEdit');
131 62
                        $router->post('project/{project}/issue/{issue}/edit', 'Project\IssueController@postEdit');
132 62
                        $router->post('project/issue/{issue}/assign', ['middleware' => 'ajax', 'uses' => 'Project\IssueController@postAssign']);
133 62
                        $router->get('project/{project}/issue/{issue}/status/{status?}', 'Project\IssueController@getClose')->where('status', '[0-1]');
134 62
                        $router->post('project/{project}/issue/upload_attachment', 'Project\IssueController@postUploadAttachment');
135 62
                        $router->post('project/{project}/issue/remove_attachment', 'Project\IssueController@postRemoveAttachment');
136 62
                        $router->post('project/issue/{issue}/change_project', 'Project\IssueController@postChangeProject');
137 62
                        $router->post('project/issue/{issue}/change_kanban_tag', ['uses' => 'Project\IssueController@postChangeKanbanTag']);
138
139
                        // Edit comment
140 62
                        $router->post('project/issue/edit_comment/{comment}', ['middleware' => 'ajax', 'uses' => 'Project\IssueController@postEditComment']);
141 62
                        $router->get('project/issue/delete_comment/{comment}', ['middleware' => 'ajax', 'uses' => 'Project\IssueController@getDeleteComment']);
142 62
                        $router->post('project/{project}/issue/{issue}/add_comment', 'Project\IssueController@postAddComment');
143 62
                        $router->get('project/{project}/issue/{issue}/delete/{attachment}', 'Project\IssueController@getDeleteAttachment');
144 62
                    });
145 62
                });
146
147
                // Admin area
148
                $router->group(['middleware' => 'permission', 'permission' => 'administration'], function (Router $router) {
149 62
                    $router->get('administration', 'AdministrationController@getIndex');
150 62
                    $router->get('administration/users', 'Administration\UsersController@getIndex');
151 62
                    $router->get('administration/users/add', 'Administration\UsersController@getAdd');
152 62
                    $router->post('administration/users/add', 'Administration\UsersController@postAdd');
153 62
                    $router->get('administration/users/edit/{user}', 'Administration\UsersController@getEdit');
154 62
                    $router->post('administration/users/edit/{user}', 'Administration\UsersController@postEdit');
155 62
                    $router->get('administration/users/delete/{user}', 'Administration\UsersController@getDelete');
156
157
                    // Tags
158 62
                    $router->get('administration/tags', 'Administration\TagsController@getIndex');
159 62
                    $router->get('administration/tag/new', 'Administration\TagsController@getNew');
160 62
                    $router->post('administration/tag/new', 'Administration\TagsController@postNew');
161 62
                    $router->get('administration/tag/{tag}/edit', 'Administration\TagsController@getEdit');
162 62
                    $router->post('administration/tag/{tag}/edit', 'Administration\TagsController@postEdit');
163 62
                    $router->get('administration/tag/{tag}/delete', 'Administration\TagsController@getDelete');
164
165
                    // Settings
166 62
                    $router->get('administration/settings', 'AdministrationController@getSettings');
167 62
                    $router->post('administration/settings', 'AdministrationController@postSettings');
168 62
                    $router->get('administration/settings/maintenance', 'AdministrationController@getChangeMaintenanceMode');
169 62
                });
170 62
            });
171 62
        });
172 62
    }
173
174
    /**
175
     * All of the routes that can be made public.
176
     *
177
     * @param Router $router
178
     *
179
     * @return void
180
     */
181 5
    protected function addPublicRoutes(Router $router)
182
    {
183
        // View issues
184 5
        $router->get('issues', 'HomeController@getIssues');
185
186
        // View projects
187 5
        $this->addPublicProjectsRoutes($router);
188
189
        $router->group(['middleware' => 'project'], function (Router $router) {
190 5
            $this->addPublicProjectRoutes($router);
191 5
        });
192 5
    }
193
194
    /**
195
     * Routes related to projects controller that can be made public or private.
196
     *
197
     * @param Router $router
198
     *
199
     * @return void
200
     */
201 62
    protected function addPublicProjectsRoutes(Router $router)
202
    {
203 62
        $router->post('projects/progress', ['middleware' => 'ajax', 'uses' => 'ProjectsController@postProgress']);
204 62
        $router->get('projects/{status?}', 'ProjectsController@getIndex')->where('status', '[0-1]');
205 62
    }
206
207
    /**
208
     * Routes related to project (issue, comment, notes, etc..) that can be made public or private.
209
     *
210
     * @param Router $router
211
     *
212
     * @return void
213
     */
214 62 View Code Duplication
    protected function addPublicProjectRoutes(Router $router)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
215
    {
216
        // View project
217 62
        $router->get('project/{project}', 'ProjectController@getIndex')->where('project', '[0-9]+');
218 62
        $router->get('project/{project}/issues/{status?}', 'ProjectController@getIssues')->where('status', '[0-1]')->where('project', '[0-9]+');
219 62
        $router->get('project/{project}/notes', 'ProjectController@getNotes')->where('project', '[0-9]+');
220
221
        // View issue
222 62
        $router->group(['middleware' => 'permission', 'permission' => 'issue-view'], function (Router $router) {
223 62
            $router->get('project/issue/{issue}', 'Project\IssueController@getIndex');
224 62
            $router->get('project/{project}/issue/{issue}', 'Project\IssueController@getIndex');
225 62
            $router->get('project/{project}/issue/{issue}/comments', ['middleware' => 'ajax', 'uses' => 'Project\IssueController@getIssueComments']);
226 62
            $router->get('project/{project}/issue/{issue}/activity', ['middleware' => 'ajax', 'uses' => 'Project\IssueController@getIssueActivity']);
227 62
            $router->get('project/{project}/issue/{issue}/download/{attachment}', 'Project\IssueController@getDownloadAttachment');
228 62
            $router->get('project/{project}/issue/{issue}/display/{attachment}', 'Project\IssueController@getDisplayAttachment');
229 62
        });
230 62
    }
231
}
232