Skip to content

Commit c4c00b9

Browse files
authored
Merge pull request #85 from tvhdev/metadata_changes_in_taskevents
Metadata changes now showing in notification hooks
2 parents c822493 + 62b3bf6 commit c4c00b9

File tree

2 files changed

+75
-62
lines changed

2 files changed

+75
-62
lines changed

Diff for: Model/NewTaskCreationModel.php

+39-34
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,9 @@ public function create(array $values)
3030
$position = empty($values['position']) ? 0 : $values['position'];
3131
$tags = array();
3232
$metaholder = array();
33-
34-
33+
34+
$origValues = array_merge(array(), $values);
35+
3536
if (isset($values['tags'])) {
3637
$tags = $values['tags'];
3738
unset($values['tags']);
@@ -45,29 +46,33 @@ public function create(array $values)
4546

4647
$this->prepare($values);
4748
$task_id = $this->db->table(TaskModel::TABLE)->persist($values);
48-
49-
49+
50+
$values = $origValues;
51+
5052
if ($task_id !== false) {
5153
if ($position > 0 && $values['position'] > 1) {
5254
$this->taskPositionModel->movePosition($values['project_id'], $task_id, $values['column_id'], $position, $values['swimlane_id'], false);
5355
}
54-
56+
5557
if (! empty($tags)) {
5658
$this->taskTagModel->save($values['project_id'], $task_id, $tags);
5759
}
58-
60+
61+
$this->createMeta($metaholder, $task_id);
62+
5963
$this->queueManager->push($this->taskEventJob->withParams(
6064
$task_id,
61-
array(TaskModel::EVENT_CREATE_UPDATE, TaskModel::EVENT_CREATE)
62-
));
65+
array(TaskModel::EVENT_CREATE_UPDATE, TaskModel::EVENT_CREATE),
66+
array(),
67+
$origValues
68+
));
6369
}
64-
65-
$this->createMeta($metaholder, $task_id);
70+
6671
$this->hook->reference('model:task:creation:aftersave', $task_id);
67-
72+
6873
return (int) $task_id;
6974
}
70-
75+
7176
/**
7277
* Prepare data
7378
*
@@ -78,32 +83,32 @@ protected function prepare(array &$values)
7883
{
7984
$values = $this->dateParser->convert($values, array('date_due'), true);
8085
$values = $this->dateParser->convert($values, array('date_started'), true);
81-
86+
8287
$this->helper->model->removeFields($values, array('another_task', 'duplicate_multiple_projects'));
8388
$this->helper->model->resetFields($values, array('creator_id', 'owner_id', 'date_due', 'date_started', 'score', 'category_id', 'time_estimated', 'time_spent'));
84-
89+
8590
if (empty($values['column_id'])) {
8691
$values['column_id'] = $this->columnModel->getFirstColumnId($values['project_id']);
8792
}
88-
93+
8994
if (empty($values['color_id'])) {
9095
$values['color_id'] = $this->colorModel->getDefaultColor();
9196
}
92-
97+
9398
if (empty($values['title'])) {
9499
$values['title'] = t('Untitled');
95100
}
96-
101+
97102
if ($this->userSession->isLogged()) {
98103
$values['creator_id'] = $this->userSession->getId();
99104
}
100-
105+
101106
$values['swimlane_id'] = empty($values['swimlane_id']) ? $this->swimlaneModel->getFirstActiveSwimlaneId($values['project_id']) : $values['swimlane_id'];
102107
$values['date_creation'] = time();
103108
$values['date_modification'] = $values['date_creation'];
104109
$values['date_moved'] = $values['date_creation'];
105110
$values['position'] = $this->taskFinderModel->countByColumnAndSwimlaneId($values['project_id'], $values['column_id'], $values['swimlane_id']) + 1;
106-
111+
107112
$this->hook->reference('model:task:creation:prepare', $values);
108113
}
109114

@@ -125,31 +130,31 @@ protected function createMeta(array &$metaholder, $task_id)
125130
$metadoublecheck = $this->metadataTypeModel->getAll();
126131
foreach ($metadoublecheck as $check) {
127132
$exists = array_key_exists('metamagikkey_' . $check['human_name'], $metaholder);
128-
if (!$exists) {
133+
if (!$exists) {
129134
$existsdoublecheck = array_key_exists('metamagikkey_' . $check['human_name'] . '[]', $metaholder);
130135
if (!$existsdoublecheck) { $metaholder['metamagikkey_' . $check['human_name']] = ''; }
131136
}
132137
}
133138

134139
foreach ($metaholder as $key => $value) {
135-
$realkey = str_replace('metamagikkey_', '', $key);
136-
$keyval = $metaholder[$key];
137-
if (empty($keyval)) { $keyval = ''; }
138-
if (!is_array($keyval)) {
140+
$realkey = str_replace('metamagikkey_', '', $key);
141+
$keyval = $metaholder[$key];
142+
if (empty($keyval)) { $keyval = ''; }
143+
if (!is_array($keyval)) {
139144
$this->taskMetadataModel->save($task_id, [$realkey => $keyval]);
140145
unset($metaholder[$key]);
141-
} else {
142-
$key_imploded = array();
143-
foreach ($keyval as $k => $v) {
146+
} else {
147+
$key_imploded = array();
148+
foreach ($keyval as $k => $v) {
144149
if ($v) { array_push($key_imploded, implode(',', $v)); }
145-
}
146-
$keys_extracted = implode(',', $key_imploded);
147-
if (empty($keys_extracted)) { $keys_extracted = ''; }
148-
$this->taskMetadataModel->save($task_id, [$realkey => $keys_extracted]);
149-
unset($metaholder[$key]);
150150
}
151+
$keys_extracted = implode(',', $key_imploded);
152+
if (empty($keys_extracted)) { $keys_extracted = ''; }
153+
$this->taskMetadataModel->save($task_id, [$realkey => $keys_extracted]);
154+
unset($metaholder[$key]);
151155
}
152-
153-
156+
}
157+
158+
154159
}
155160
}

Diff for: Model/NewTaskModificationModel.php

+36-28
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,24 @@ class NewTaskModificationModel extends Base
2828
public function update(array $values, $fire_events = true)
2929
{
3030
$task = $this->taskFinderModel->getById($values['id']);
31-
31+
3232
$this->updateTags($values, $task);
33-
if($this->checkKeys($values))$this->updateMeta($values, $task);
33+
3434
$this->prepare($values);
35-
$result = $this->db->table(TaskModel::TABLE)->eq('id', $task['id'])->update($values);
36-
37-
if ($fire_events && $result) {
38-
$this->fireEvents($task, $values);
39-
}
40-
41-
return $result;
35+
36+
$values = array_filter($values);
37+
$origValues = array_merge(array(), $values);
38+
39+
if($this->checkKeys($values))
40+
$this->updateMeta($values, $task);
41+
42+
$result = $this->db->table(TaskModel::TABLE)->eq('id', $task['id'])->update($values);
43+
44+
if ($fire_events && $result) {
45+
$this->fireEvents($task, $origValues);
46+
}
47+
48+
return $result;
4249
}
4350

4451
/**
@@ -50,17 +57,17 @@ public function update(array $values, $fire_events = true)
5057
*/
5158
public function checkKeys($values)
5259
{
53-
60+
5461
if(count(preg_grep('/^metamagikkey[\d]*/', array_keys($values))) > 0)
5562
{
56-
return true;
63+
return true;
5764
}
5865
else
5966
{
60-
return false;
67+
return false;
6168
}
6269
}
63-
70+
6471
/**
6572
* Fire events
6673
*
@@ -71,21 +78,21 @@ public function checkKeys($values)
7178
protected function fireEvents(array $task, array $changes)
7279
{
7380
$events = array();
74-
81+
7582
if ($this->isAssigneeChanged($task, $changes)) {
7683
$events[] = TaskModel::EVENT_ASSIGNEE_CHANGE;
7784
} elseif ($this->isModified($task, $changes)) {
7885
$events[] = TaskModel::EVENT_CREATE_UPDATE;
7986
$events[] = TaskModel::EVENT_UPDATE;
8087
}
81-
88+
8289
if (! empty($events)) {
8390
$this->queueManager->push($this->taskEventJob
8491
->withParams($task['id'], $events, $changes, array(), $task)
85-
);
92+
);
8693
}
8794
}
88-
95+
8996
/**
9097
* Return true if the task have been modified
9198
*
@@ -100,7 +107,7 @@ protected function isModified(array $task, array $changes)
100107
unset($diff['date_modification']);
101108
return count($diff) > 0;
102109
}
103-
110+
104111
/**
105112
* Return true if the field is the only modified value
106113
*
@@ -115,7 +122,7 @@ protected function isAssigneeChanged(array $task, array $changes)
115122
unset($diff['date_modification']);
116123
return isset($changes['owner_id']) && $task['owner_id'] != $changes['owner_id'] && count($diff) === 1;
117124
}
118-
125+
119126
/**
120127
* Prepare data before task modification
121128
*
@@ -126,16 +133,16 @@ protected function prepare(array &$values)
126133
{
127134
$values = $this->dateParser->convert($values, array('date_due'), true);
128135
$values = $this->dateParser->convert($values, array('date_started'), true);
129-
136+
130137
$this->helper->model->removeFields($values, array('id'));
131138
$this->helper->model->resetFields($values, array('date_due', 'date_started', 'score', 'category_id', 'time_estimated', 'time_spent'));
132139
$this->helper->model->convertIntegerFields($values, array('priority', 'is_active', 'recurrence_status', 'recurrence_trigger', 'recurrence_factor', 'recurrence_timeframe', 'recurrence_basedate'));
133-
140+
134141
$values['date_modification'] = time();
135-
142+
136143
$this->hook->reference('model:task:modification:prepare', $values);
137144
}
138-
145+
139146
/**
140147
* Update tags
141148
*
@@ -154,9 +161,10 @@ protected function updateTags(array &$values, array $original_task)
154161
protected function updateMeta(array &$values, array $original_task)
155162
{
156163
$metadoublecheck = $this->metadataTypeModel->getAll();
164+
157165
foreach ($metadoublecheck as $check) {
158166
$exists = array_key_exists('metamagikkey_' . $check['human_name'], $values);
159-
if (!$exists) {
167+
if (!$exists) {
160168
$existsdoublecheck = array_key_exists('metamagikkey_' . $check['human_name'] . '[]', $values);
161169
if (!$existsdoublecheck) { $values['metamagikkey_' . $check['human_name']] = ''; }
162170
}
@@ -171,19 +179,19 @@ protected function updateMeta(array &$values, array $original_task)
171179
$keyval = $values[$key];
172180
if (empty($keyval)) { $keyval = ''; }
173181
if (!is_array($keyval)) {
174-
$this->taskMetadataModel->save($original_task['id'], [$realkey => $keyval]);
175-
unset($values[$key]);
182+
$this->taskMetadataModel->save($original_task['id'], [$realkey => $keyval]);
183+
unset($values[$key]);
176184
} else {
177185
$key_imploded = array();
178186
foreach ($keyval as $k => $v) {
179-
if ($v) { array_push($key_imploded, implode(',', $v)); }
187+
if ($v) { array_push($key_imploded, implode(',', $v)); }
180188
}
181189
$keys_extracted = implode(',', $key_imploded);
182190
if (empty($keys_extracted)) { $keys_extracted = ''; }
183191
$this->taskMetadataModel->save($original_task['id'], [$realkey => $keys_extracted]);
184192
unset($values[$key]);
185193
}
186194
}
187-
}
195+
}
188196
}
189197
}

0 commit comments

Comments
 (0)