Test Failed
Push — master ( fcc3b8...91cd3f )
by Yuvaraj
04:41
created

DbTaskRepository::createTask()   B

Complexity

Conditions 4
Paths 9

Size

Total Lines 80
Code Lines 65

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 80
rs 8.5454
c 0
b 0
f 0
cc 4
eloc 65
nc 9
nop 0

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
namespace LaravelRealtimeChat\Repositories\Task;
4
5
use LaravelRealtimeChat\Repositories\Team\TeamRepository;
6
7
class DbTaskRepository implements TaskRepository {
8
9
    /**
10
     * @function creates project
11
     * @param null
12
     * @return null
13
     */
14
    public function __construct(TeamRepository $teamRepository) {
15
        $this->teamRepository = $teamRepository;
0 ignored issues
show
Bug Best Practice introduced by
The property teamRepository does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
16
    }
17
18
    public function createProject() {
19
        $project = \Input::get("project");
0 ignored issues
show
Bug introduced by
The type Input was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
20
        $teamEnId = \Input::get("team");
21
22
        /*
23
         * Check if prjoject is already created by admin
24
         * 
25
         */
26
        $projects = \DB::table('projects')
27
                        ->select('projects.*')
28
                        ->leftJoin('team_heads', 'projects.un_id', '=', 'team_heads.project_id')
29
                        ->where('projects.project_name', '=', $project)
30
                        ->where('team_heads.author_id', '=', \Auth::user()->id)->first();
31
        if (count($projects) == 0) {
32
33
34
35
            $team = $this->teamRepository->getTeamDecodedId($teamEnId);
36
37
            $id = generateId();
38
            try {
39
                //insert project
40
                $lastId = \DB::table('projects')->insertGetId(
41
                        ['un_id' => $id, "project_name" => $project]
42
                );
43
                $lastId = \DB::table('projects')
44
                                ->select('un_id')
45
                                ->where('id', '=', $lastId)->first();
46
                $lastId = $lastId['un_id'];
47
            } catch (\Exception $e) {
48
                //coudnt insert
49
                return "Server Error Occurred while processiong your request!";
50
            }
51
52
            try {
53
                //get the id of the team head before assigning project
54
                $user_id = \DB::table('team_heads')
55
                        ->select('team_heads.user_id')
56
                        ->where('team_heads.team_id', '=', $team)
57
                        ->whereNull('team_heads.project_id')
58
                        ->first();
59
                if (count($user_id) > 0) {
60
                    \DB::table('team_heads')
61
                            ->where('team_id', '=', $team)
62
                            ->where('user_id', '=', $user_id['user_id'])
63
                            ->whereNull('team_heads.project_id')
64
                            ->update(array('project_id' => $lastId));
65
//                    \DB::table('team_heads')->insertGetId(
66
//                            ['project_id' => $lastId, "team_id" => $team, 'author_id' => \Session::get("userId"), "user_id" => $user_id['user_id']]
67
//                    );
68
                } else {
69
                    \DB::table('team_heads')->insertGetId(
70
                            ['project_id' => $lastId, "team_id" => $team, 'author_id' => \Session::get("userId"), "user_id" => \Session::get("userId")]
71
                    );
72
                }
73
                return "Project Created Successfully";
74
            } catch (\Exception $e) {
75
                //coudnt insert
76
                return "Server Error Occurred while processiong your request!";
77
            }
78
        } else {
79
            return "You have already created this project!";
80
        }
81
    }
82
83
    /**
84
     * @function gets array of projects created
85
     * @param null
86
     * @return array of projects
87
     */
88
    public function getProjects() {
89
        /*
90
         * Get all created projects for  teams where logged in user is a member
91
         */
92
        $projects = \DB::table('projects')
93
                        ->select('projects.*')
94
                        ->leftJoin('team_heads', 'projects.un_id', '=', 'team_heads.project_id')
95
                        ->leftJoin('team_channel_users', 'team_channel_users.team_channel_name_id', '=', 'team_heads.team_id')
96
                        ->where('team_channel_users.user_id', '=', \Auth::user()->id)->get();
97
98
        return $projects;
99
    }
100
101
    public function getTracker() {
102
        $trackers = \DB::table('tracker')
103
                ->select('un_id', 'name')
104
                ->get();
105
        return $trackers;
106
    }
107
108
    public function getStatus() {
109
        $status = \DB::table('tracker_status_names')
110
                ->select('un_id', 'name')
111
                ->get();
112
        return $status;
113
    }
114
115
    public function getPriorities() {
116
        $priorities = \DB::table('tracker_priority')
117
                ->select('un_id', 'name')
118
                ->get();
119
        return $priorities;
120
    }
121
122
    public function createTask() {
123
        $rules = array(
124
            'tracker' => 'required',
125
            'status' => 'required',
126
            'priority' => 'required',
127
            'assignee' => 'required',
128
            'startDate' => 'required',
129
            'subject' => 'required|min:3'
130
        );
131
        $messages = array(
132
            'tracker.required' => 'trackerErr',
133
            'status.required' => 'statusErr',
134
            'priority.required' => 'priorityErr',
135
            'subject.required' => 'subjectErr',
136
            'assignee.required' => 'assigneeErr',
137
            'startDate.required' => 'startDateErr',
138
            'subject.min' => 'subjectMinErr',
139
        );
140
        $validator = \Validator::make(\Input::all(), $rules, $messages);
141
142
        if ($validator->fails()) {
143
            return \Response::json([
144
                        'success' => false,
145
                        'result' => $validator->messages()
146
            ]);
147
        }
148
        $id = generateId();
149
        $trackerId = \Input::get("tracker");
150
        $statusId = \Input::get("status");
151
        $priorityId = \Input::get("priority");
152
        $subject = \Input::get("subject");
153
        $assigneeId = \Input::get("assignee");
154
        $startDate = \Input::get("startDate");
155
        $endDate = \Input::get("endDate");
156
        $description = \Input::get("description");
157
        $projectId = \Input::get("projectId");
158
        $taskId = \Input::get("taskId");
159
        $teamId = $this->teamRepository->getTeamDecodedId(\Input::get("teamId"));
160
        try {
161
            //insert task
162
            $lastId = \DB::table('task_activities')->insertGetId(
163
                    ['un_id' => $id,
164
                        "tracker_id" => $trackerId,
165
                        "tracker_status_id" => $statusId,
166
                        "tracker_priority_id" => $priorityId,
167
                        "tracker_subject" => $subject,
168
                        "project_id" => $projectId,
169
                        "team_id" => $teamId,
170
                        "start_date" => $startDate,
171
                        "end_date" => $endDate,
172
                        "user_id" => $assigneeId]
173
            );
174
            $lastUnId = \DB::table('task_activities')
175
                    ->select('un_id')
176
                    ->where('id', '=', $lastId)
177
                    ->first();
178
            $lastDescId = \DB::table('tracker_description')->insertGetId(
179
                    ['un_id' => generateId(),
180
                        "tracker_activity_un_id" => $lastUnId['un_id'],
181
                        "description" => $description,
182
                    ]
183
            );
184
            if ($taskId == '')
185
                $taskId = $lastUnId['un_id'];
186
            \DB::table('task_updated_activities')->insertGetId(
187
                    ['un_id' => generateId(),
188
                        "tracker_activity_un_id" => $lastUnId['un_id'],
189
                        "parent_tracker_activity_un_id" => $taskId,
190
                    ]
191
            );
192
        } catch (\Exception $e) {
193
//                                coudnt insert
194
            return \Response::json([
195
                        'error' => true,
196
            ]);
197
        }
198
        return \Response::json([
199
                    'success' => true,
200
                    'last_id' => $lastId,
201
                    'last_desc_id' => $lastDescId,
202
        ]);
203
    }
204
205
    public function rollBackTask() {
206
        $id = \Input::get('last_id');
207
        $descId = \Input::get('last_desc_id');
208
        \DB::table('task_activities')->where('id', '=', $id)->delete();
209
        \DB::table('tracker_description')->where('id', '=', $descId)->delete();
210
    }
211
212
    public function filterDashboard() {
213
        $teamId = $this->teamRepository->getTeamDecodedId(\Input::get("teamId"));
214
        $projectId = \Input::get('projectId');
215
        $dashboardCount = \DB::table('task_updated_activities')
216
                        ->select(\DB::raw('count(tracker_status_names.name) as count,tracker_status_names.name'))
217
                        ->leftJoin('task_activities', 'task_activities.un_id', '=', 'task_updated_activities.tracker_activity_un_id')
218
                        ->leftJoin('tracker', 'tracker.un_id', '=', 'task_activities.tracker_id')
219
                        ->leftJoin('tracker_priority', 'tracker_priority.un_id', '=', 'task_activities.tracker_priority_id')
220
                        ->leftJoin('tracker_status_names', 'tracker_status_names.un_id', '=', 'task_activities.tracker_status_id')
221
                        ->leftJoin('users', 'users.id', '=', 'task_activities.user_id')
222
                        ->where('task_activities.user_id', '=', \Auth::user()->id)
223
                        ->whereIn('task_updated_activities.id', function($query) {
224
                            $query->select(\DB::raw('MAX(id)'))
225
                            ->from('task_updated_activities')
226
                            ->groupBy('task_updated_activities.parent_tracker_activity_un_id');
227
                        })
228
                        ->where('task_activities.project_id', '=', $projectId)
229
                        ->where('task_activities.team_id', '=', $teamId)->groupBy('tracker_status_names.name')->get();
230
231
232
        $allCount = \DB::table('task_updated_activities')
233
                        ->select(\DB::raw('count(*) as allCount'))
234
                        ->leftJoin('task_activities', 'task_activities.un_id', '=', 'task_updated_activities.tracker_activity_un_id')
235
                        ->leftJoin('tracker', 'tracker.un_id', '=', 'task_activities.tracker_id')
236
                        ->leftJoin('tracker_priority', 'tracker_priority.un_id', '=', 'task_activities.tracker_priority_id')
237
                        ->leftJoin('tracker_status_names', 'tracker_status_names.un_id', '=', 'task_activities.tracker_status_id')
238
                        ->leftJoin('users', 'users.id', '=', 'task_activities.user_id')
239
                        ->where('task_activities.user_id', '=', \Auth::user()->id)
240
                        ->whereIn('task_updated_activities.id', function($query) {
241
                            $query->select(\DB::raw('MAX(id)'))
242
                            ->from('task_updated_activities')
243
                            ->groupBy('task_updated_activities.parent_tracker_activity_un_id');
244
                        })
245
                        ->where('task_activities.project_id', '=', $projectId)
246
                        ->where('task_activities.team_id', '=', $teamId)->first();
247
        $dashboardCount['allCount'] = $allCount['allCount'];
248
        return $dashboardCount;
249
    }
250
251
    public function filterGrid() {
252
        $teamId = $this->teamRepository->getTeamDecodedId(\Input::get("teamId"));
253
        $page = \Input::get('current');
254
        $rowCount = \Input::get('rowCount');
255
        $searchPhrase = \Input::get('searchPhrase');
256
        $limit = $rowCount * $page;
257
        $offset = $rowCount * ($page - 1);
258
        $projectId = \Input::get('projectId');
259
        $data = \DB::table('task_updated_activities')
260
                ->select('task_activities.un_id', 'tracker_priority.name as priority_name', 'tracker_status_names.name as status_name', 'tracker.name as tracker', 'users.first_name', 'users.last_name', 'task_activities.created_at', 'task_activities.start_date', 'task_activities.end_date')
261
                ->leftJoin('task_activities', 'task_activities.un_id', '=', 'task_updated_activities.tracker_activity_un_id')
262
                ->leftJoin('tracker', 'tracker.un_id', '=', 'task_activities.tracker_id')
263
                ->leftJoin('tracker_priority', 'tracker_priority.un_id', '=', 'task_activities.tracker_priority_id')
264
                ->leftJoin('tracker_status_names', 'tracker_status_names.un_id', '=', 'task_activities.tracker_status_id')
265
                ->leftJoin('users', 'users.id', '=', 'task_activities.user_id')
266
                ->where('task_activities.user_id', '=', \Auth::user()->id)
267
                ->whereIn('task_updated_activities.id', function($query) {
268
                    $query->select(\DB::raw('MAX(id)'))
269
                    ->from('task_updated_activities')
270
                    ->groupBy('task_updated_activities.parent_tracker_activity_un_id');
271
                })
272
                ->where('task_activities.project_id', '=', $projectId)
273
                ->where('task_activities.team_id', '=', $teamId);
274
        if ($searchPhrase != '') {
275
            $data->whereRaw(\DB::raw("(tracker_priority.name like  '%$searchPhrase%' OR tracker_status_names.name like  '%$searchPhrase%' OR tracker.name like  '%$searchPhrase%' OR users.first_name like  '%$searchPhrase%' OR users.last_name like  '%$searchPhrase%') "));
276
        }
277
278
        $result = $data->skip($offset)->take($limit)->get();
279
        return $result;
280
    }
281
282
    public function getTaskData() {
283
        $taskId = \Input::get('id');
284
        $result = \DB::table('task_activities')
285
                ->select('task_updated_activities.parent_tracker_activity_un_id', 'task_activities.un_id', 'tracker_priority.name as priority_name', 'tracker_status_names.name as status_name', 'tracker.name as tracker', 'users.first_name', 'users.id as main_user_id', 'users.last_name', 'task_activities.created_at', 'task_activities.start_date', 'task_activities.end_date', 'tracker_description.description', 'task_activities.team_id', 'task_activities.tracker_subject')
286
                ->leftJoin('task_updated_activities', 'task_updated_activities.tracker_activity_un_id', '=', 'task_activities.un_id')
287
                ->leftJoin('tracker', 'tracker.un_id', '=', 'task_activities.tracker_id')
288
                ->leftJoin('tracker_priority', 'tracker_priority.un_id', '=', 'task_activities.tracker_priority_id')
289
                ->leftJoin('tracker_status_names', 'tracker_status_names.un_id', '=', 'task_activities.tracker_status_id')
290
                ->leftJoin('tracker_description', 'tracker_description.tracker_activity_un_id', '=', 'task_activities.un_id')
291
               
292
                ->leftJoin('users', 'users.id', '=', 'task_activities.user_id')
293
                ->where('task_activities.un_id', '=', $taskId)
294
                ->first();
295
296
297
            $files = \DB::table('task_activities')
298
                    ->select('tracker_files.file_name')
299
                     ->leftJoin('tracker_files', 'tracker_files.tracker_activity_un_id', '=', 'task_activities.un_id')
300
                    ->where('tracker_files.tracker_activity_un_id', '=', $result['un_id'])
301
                    ->get();
302
           
303
            foreach ($files as $file_name) {
304
                $result['file_name'][] = $file_name['file_name'];
305
            }
306
            $row=$result;
307
308
        return $row;
309
    }
310
311
    public function saveTaskFiles($fileName) {
312
        $lastUnId = \DB::table('task_activities')
313
                ->select('un_id')
314
                ->orderBy('id', 'desc')
315
                ->first();
316
        \DB::table('tracker_files')->insertGetId(
317
                ['un_id' => generateId(),
318
                    "tracker_activity_un_id" => $lastUnId['un_id'],
319
                    "file_name" => $fileName,
320
                ]
321
        );
322
    }
323
324
    public function getUpdates($parent_task_id) {
325
        $data = \DB::table('task_activities')
326
                        ->select('task_activities.id', 'task_updated_activities.parent_tracker_activity_un_id', 'task_updated_activities.tracker_activity_un_id', 'task_activities.un_id', 'tracker_priority.name as priority_name', 'tracker_status_names.name as status_name', 'tracker.name as tracker', 'users.first_name', 'users.id as main_user_id', 'users.last_name', 'task_activities.created_at', 'task_activities.start_date', 'task_activities.end_date', 'tracker_description.description', 'task_activities.team_id', 'task_activities.tracker_subject', 'task_activities.un_id as main_un_id')
327
                        ->leftJoin('task_updated_activities', 'task_updated_activities.tracker_activity_un_id', '=', 'task_activities.un_id')
328
                        ->leftJoin('tracker', 'tracker.un_id', '=', 'task_activities.tracker_id')
329
                        ->leftJoin('tracker_priority', 'tracker_priority.un_id', '=', 'task_activities.tracker_priority_id')
330
                        ->leftJoin('tracker_status_names', 'tracker_status_names.un_id', '=', 'task_activities.tracker_status_id')
331
                        ->leftJoin('tracker_description', 'tracker_description.tracker_activity_un_id', '=', 'task_activities.un_id')
332
                        ->leftJoin('users', 'users.id', '=', 'task_activities.user_id')
333
                        ->where('task_updated_activities.parent_tracker_activity_un_id', '=', $parent_task_id)
334
                        ->distinct()->get();
335
336
        foreach ($data as $key => $values) {
337
338
            $files = \DB::table('task_activities')
339
                    ->select('tracker_files.file_name', 'tracker_files.tracker_activity_un_id')
340
                    ->leftJoin('tracker_files', 'tracker_files.tracker_activity_un_id', '=', 'task_activities.un_id')
341
                    ->where('tracker_files.tracker_activity_un_id', '=', $values['tracker_activity_un_id'])
342
                    ->get();
343
            foreach ($files as $file_name) {
344
                $values['file_name'][] = $file_name['file_name'];
345
            }
346
            $row[]=$values;
347
        }
348
349
350
        return $row;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $row seems to be defined by a foreach iteration on line 336. Are you sure the iterator is never empty, otherwise this variable is not defined?
Loading history...
351
    }
352
    
353
    function getProjectTeams($id){
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
354
        $teams = \DB::table('team_channels')
355
                        ->select('team_channels.channel_view_name', 'team_channels.team_channel_id', 'team_channels.id', 'team_channels.created_at','team_heads.user_id')
356
                        ->leftJoin('team_channel_users', 'team_channel_users.team_channel_name_id', '=', 'team_channels.id')
357
                        ->leftJoin('team_heads', 'team_heads.team_id', '=', 'team_channels.id')
358
                        ->where('team_heads.project_id', '=', $id)
359
                        ->where('team_channel_users.user_id', '=', \Auth::user()->id)->distinct()->get();
360
        return $teams;
361
    }
362
363
}
364