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

DbTaskRepository   A

Complexity

Total Complexity 25

Size/Duplication

Total Lines 354
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 25
dl 0
loc 354
rs 10
c 0
b 0
f 0

14 Methods

Rating   Name   Duplication   Size   Complexity  
A getTracker() 0 5 1
B createTask() 0 80 4
B getUpdates() 0 27 3
A __construct() 0 2 1
A rollBackTask() 0 5 1
B getTaskData() 0 27 2
A getProjects() 0 11 1
A getProjectTeams() 0 8 1
B createProject() 0 62 5
A saveTaskFiles() 0 9 1
A getStatus() 0 5 1
B filterDashboard() 0 37 1
B filterGrid() 0 29 2
A getPriorities() 0 5 1
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