FilterServiceProvider   C
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 167
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 30

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 167
rs 5
wmc 4
lcom 1
cbo 30

4 Methods

Rating   Name   Duplication   Size   Complexity  
A register() 0 8 1
A createUserFilter() 0 11 1
A createProjectFilter() 0 49 1
A createTaskFilter() 0 65 1
1
<?php
2
3
/*
4
 * This file is part of Jitamin.
5
 *
6
 * Copyright (C) Jitamin Team
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 Jitamin\Providers;
13
14
use Jitamin\Filter\ProjectActivityCreationDateFilter;
15
use Jitamin\Filter\ProjectActivityCreatorFilter;
16
use Jitamin\Filter\ProjectActivityProjectNameFilter;
17
use Jitamin\Filter\ProjectActivityTaskStatusFilter;
18
use Jitamin\Filter\ProjectActivityTaskTitleFilter;
19
use Jitamin\Filter\TaskAssigneeFilter;
20
use Jitamin\Filter\TaskCategoryFilter;
21
use Jitamin\Filter\TaskColorFilter;
22
use Jitamin\Filter\TaskColumnFilter;
23
use Jitamin\Filter\TaskCommentFilter;
24
use Jitamin\Filter\TaskCreationDateFilter;
25
use Jitamin\Filter\TaskCreatorFilter;
26
use Jitamin\Filter\TaskDescriptionFilter;
27
use Jitamin\Filter\TaskDueDateFilter;
28
use Jitamin\Filter\TaskIdFilter;
29
use Jitamin\Filter\TaskLinkFilter;
30
use Jitamin\Filter\TaskModificationDateFilter;
31
use Jitamin\Filter\TaskMovedDateFilter;
32
use Jitamin\Filter\TaskPriorityFilter;
33
use Jitamin\Filter\TaskProjectFilter;
34
use Jitamin\Filter\TaskReferenceFilter;
35
use Jitamin\Filter\TaskStartDateFilter;
36
use Jitamin\Filter\TaskStatusFilter;
37
use Jitamin\Filter\TaskSubtaskAssigneeFilter;
38
use Jitamin\Filter\TaskSwimlaneFilter;
39
use Jitamin\Filter\TaskTagFilter;
40
use Jitamin\Filter\TaskTitleFilter;
41
use Jitamin\Foundation\Filter\LexerBuilder;
42
use Jitamin\Foundation\Filter\QueryBuilder;
43
use Jitamin\Model\ProjectGroupRoleModel;
44
use Jitamin\Model\ProjectModel;
45
use Jitamin\Model\ProjectUserRoleModel;
46
use Jitamin\Model\UserModel;
47
use Pimple\Container;
48
use Pimple\ServiceProviderInterface;
49
50
/**
51
 * Class of Filter Service Provider.
52
 */
53
class FilterServiceProvider implements ServiceProviderInterface
54
{
55
    /**
56
     * Register providers.
57
     *
58
     * @param \Pimple\Container $container
59
     *
60
     * @return \Pimple\Container
61
     */
62
    public function register(Container $container)
63
    {
64
        $this->createUserFilter($container);
65
        $this->createProjectFilter($container);
66
        $this->createTaskFilter($container);
67
68
        return $container;
69
    }
70
71
    /**
72
     * Create user filter.
73
     *
74
     * @param Container $container
75
     *
76
     * @return Container
77
     */
78
    public function createUserFilter(Container $container)
79
    {
80
        $container['userQuery'] = $container->factory(function ($c) {
81
            $builder = new QueryBuilder();
82
            $builder->withQuery($c['db']->table(UserModel::TABLE));
83
84
            return $builder;
85
        });
86
87
        return $container;
88
    }
89
90
    /**
91
     * Create project filter.
92
     *
93
     * @param Container $container
94
     *
95
     * @return Container
96
     */
97
    public function createProjectFilter(Container $container)
98
    {
99
        $container['projectGroupRoleQuery'] = $container->factory(function ($c) {
100
            $builder = new QueryBuilder();
101
            $builder->withQuery($c['db']->table(ProjectGroupRoleModel::TABLE));
102
103
            return $builder;
104
        });
105
106
        $container['projectUserRoleQuery'] = $container->factory(function ($c) {
107
            $builder = new QueryBuilder();
108
            $builder->withQuery($c['db']->table(ProjectUserRoleModel::TABLE));
109
110
            return $builder;
111
        });
112
113
        $container['projectQuery'] = $container->factory(function ($c) {
114
            $builder = new QueryBuilder();
115
            $builder->withQuery($c['db']->table(ProjectModel::TABLE));
116
117
            return $builder;
118
        });
119
120
        $container['projectActivityLexer'] = $container->factory(function ($c) {
121
            $builder = new LexerBuilder();
122
            $builder
123
                ->withQuery($c['projectActivityModel']->getQuery())
124
                ->withFilter(new ProjectActivityTaskTitleFilter(), true)
125
                ->withFilter(new ProjectActivityTaskStatusFilter())
126
                ->withFilter(new ProjectActivityProjectNameFilter())
127
                ->withFilter(ProjectActivityCreationDateFilter::getInstance()
128
                    ->setDateParser($c['dateParser'])
129
                )
130
                ->withFilter(ProjectActivityCreatorFilter::getInstance()
131
                    ->setCurrentUserId($c['userSession']->getId())
132
                );
133
134
            return $builder;
135
        });
136
137
        $container['projectActivityQuery'] = $container->factory(function ($c) {
138
            $builder = new QueryBuilder();
139
            $builder->withQuery($c['projectActivityModel']->getQuery());
140
141
            return $builder;
142
        });
143
144
        return $container;
145
    }
146
147
    /**
148
     * Create task filter.
149
     *
150
     * @param Container $container
151
     *
152
     * @return Container
153
     */
154
    public function createTaskFilter(Container $container)
155
    {
156
        $container['taskQuery'] = $container->factory(function ($c) {
157
            $builder = new QueryBuilder();
158
            $builder->withQuery($c['taskFinderModel']->getExtendedQuery());
159
160
            return $builder;
161
        });
162
163
        $container['taskLexer'] = $container->factory(function ($c) {
164
            $builder = new LexerBuilder();
165
166
            $builder
167
                ->withQuery($c['taskFinderModel']->getExtendedQuery())
168
                ->withFilter(TaskAssigneeFilter::getInstance()
169
                    ->setCurrentUserId($c['userSession']->getId())
170
                )
171
                ->withFilter(new TaskCategoryFilter())
172
                ->withFilter(TaskColorFilter::getInstance()
173
                    ->setColorModel($c['colorModel'])
174
                )
175
                ->withFilter(new TaskPriorityFilter())
176
                ->withFilter(new TaskColumnFilter())
177
                ->withFilter(new TaskCommentFilter())
178
                ->withFilter(TaskCreationDateFilter::getInstance()
179
                    ->setDateParser($c['dateParser'])
180
                )
181
                ->withFilter(TaskCreatorFilter::getInstance()
182
                    ->setCurrentUserId($c['userSession']->getId())
183
                )
184
                ->withFilter(new TaskDescriptionFilter())
185
                ->withFilter(TaskDueDateFilter::getInstance()
186
                    ->setDateParser($c['dateParser'])
187
                )
188
                ->withFilter(TaskStartDateFilter::getInstance()
189
                    ->setDateParser($c['dateParser'])
190
                )
191
                ->withFilter(new TaskIdFilter())
192
                ->withFilter(TaskLinkFilter::getInstance()
193
                    ->setDatabase($c['db'])
194
                )
195
                ->withFilter(TaskModificationDateFilter::getInstance()
196
                    ->setDateParser($c['dateParser'])
197
                )
198
                ->withFilter(TaskMovedDateFilter::getInstance()
199
                    ->setDateParser($c['dateParser'])
200
                )
201
                ->withFilter(new TaskProjectFilter())
202
                ->withFilter(new TaskReferenceFilter())
203
                ->withFilter(new TaskStatusFilter())
204
                ->withFilter(TaskSubtaskAssigneeFilter::getInstance()
205
                    ->setCurrentUserId($c['userSession']->getId())
206
                    ->setDatabase($c['db'])
207
                )
208
                ->withFilter(new TaskSwimlaneFilter())
209
                ->withFilter(TaskTagFilter::getInstance()
210
                    ->setDatabase($c['db'])
211
                )
212
                ->withFilter(new TaskTitleFilter(), true);
213
214
            return $builder;
215
        });
216
217
        return $container;
218
    }
219
}
220