|
9 | 9 |
|
10 | 10 | use kartik\select2\Select2; |
11 | 11 | use rmrevin\yii\fontawesome\FAR; |
| 12 | +use rmrevin\yii\fontawesome\FAS; |
12 | 13 | use simialbi\yii2\kanban\KanbanAsset; |
13 | 14 | use simialbi\yii2\kanban\KanbanSwiperAsset; |
14 | | -use simialbi\yii2\kanban\models\ChecklistElement; |
15 | 15 | use simialbi\yii2\kanban\models\Task; |
16 | 16 | use simialbi\yii2\turbo\Frame; |
17 | 17 | use simialbi\yii2\turbo\Modal; |
18 | 18 | use simialbi\yii2\widgets\Widget; |
19 | 19 | use Yii; |
20 | 20 | use yii\bootstrap4\Html; |
21 | | -use yii\db\Expression; |
22 | | -use yii\db\Query; |
23 | 21 | use yii\helpers\ArrayHelper; |
24 | 22 | use yii\helpers\Url; |
25 | 23 | use yii\web\JsExpression; |
@@ -85,34 +83,31 @@ public function run() |
85 | 83 | $this->view->registerAssetBundle(KanbanSwiperAsset::class); |
86 | 84 | $this->view->registerAssetBundle(KanbanAsset::class); |
87 | 85 |
|
88 | | - $checklistQuery = new Query(); |
89 | | - $checklistQuery |
90 | | - ->select('end_date') |
91 | | - ->from(ChecklistElement::tableName()) |
92 | | - ->where(new Expression('[[task_id]] = {{t}}.[[id]]')) |
93 | | - ->andWhere(['is_done' => false]) |
94 | | - ->orderBy(['end_date' => SORT_ASC]) |
95 | | - ->limit(1); |
96 | 86 | $tasks = Task::find() |
97 | | - ->select([ |
98 | | - '{{t}}.*', |
99 | | - 'cEndDate' => $checklistQuery, |
100 | | - 'endDate' => new Expression('IF({{t}}.[[end_date]], {{t}}.[[end_date]], (SELECT [[cEndDate]]))') |
101 | | - ]) |
102 | 87 | ->cache(60) |
103 | 88 | ->alias('t') |
104 | 89 | ->with(['checklistElements', 'comments']) |
105 | 90 | ->innerJoinWith('bucket bu') |
106 | 91 | ->innerJoinWith('board b') |
107 | 92 | ->innerJoinWith('assignments u') |
108 | 93 | ->where(['not', ['{{t}}.[[status]]' => Task::STATUS_DONE]]) |
109 | | - ->andWhere(['{{u}}.[[user_id]]' => Yii::$app->user->id]) |
110 | | - ->addOrderBy(new Expression('-[[endDate]] DESC')) |
111 | | - ->addOrderBy(new Expression('-{{t}}.[[start_date]] DESC')) |
112 | | - ->addOrderBy(['{{t}}.[[created_at]]' => SORT_ASC]) |
113 | | - ->asArray(true); |
| 94 | + ->andWhere(['{{u}}.[[user_id]]' => Yii::$app->user->id]); |
114 | 95 |
|
115 | 96 | $results = $tasks->all(); |
| 97 | + usort($results, function ($a, $b) { |
| 98 | + /** @var $a Task */ |
| 99 | + /** @var $b Task */ |
| 100 | + if ($a->endDate === $b->endDate) { |
| 101 | + return 0; |
| 102 | + } |
| 103 | + if ($a->endDate === null && $b->endDate !== null) { |
| 104 | + return 1; |
| 105 | + } |
| 106 | + if ($a->endDate !== null && $b->endDate === null) { |
| 107 | + return -1; |
| 108 | + } |
| 109 | + return ($a->endDate < $b->endDate) ? -1 : 1; |
| 110 | + }); |
116 | 111 |
|
117 | 112 | ob_start(); |
118 | 113 | if ($this->renderModal) { |
@@ -182,15 +177,23 @@ function onHide() { |
182 | 177 |
|
183 | 178 | foreach ($results as $task) { |
184 | 179 | $options = $this->itemOptions; |
185 | | - $options['href'] = Url::to(["/{$this->kanbanModuleName}/task/update", 'id' => $task['id'], 'return' => 'todo']); |
| 180 | + $options['href'] = Url::to([ |
| 181 | + "/{$this->kanbanModuleName}/task/update", |
| 182 | + 'id' => $task['id'], |
| 183 | + 'return' => 'todo' |
| 184 | + ]); |
186 | 185 | $options['data'] = [ |
187 | 186 | 'toggle' => 'modal', |
188 | 187 | 'pjax' => '0', |
189 | 188 | 'turbo-frame' => 'task-modal-frame', |
190 | 189 | 'target' => '#task-modal' |
191 | 190 | ]; |
192 | 191 |
|
193 | | - $content = Html::tag('h6', $task['subject'], ['class' => ['m-0']]); |
| 192 | + $subject = $task['subject']; |
| 193 | + if ($task->isRecurrentInstance()) { |
| 194 | + $subject = FAS::i('infinity')->transform('shrink-4.5')->mask('circle') . $subject; |
| 195 | + } |
| 196 | + $content = Html::tag('h6', $subject, ['class' => ['m-0']]); |
194 | 197 | $small = $task['board']['name']; |
195 | 198 |
|
196 | 199 | if (($cnt = count($task['checklistElements'])) > 0) { |
|
0 commit comments