forked from VonRosenchild/ubirimi
/
SaveController.php
128 lines (105 loc) · 4.91 KB
/
SaveController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
/*
* Copyright (C) 2012-2014 SC Ubirimi SRL <info-copyright@ubirimi.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/
namespace Ubirimi\Yongo\Controller\Issue;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Ubirimi\Container\UbirimiContainer;
use Ubirimi\Event\LogEvent;
use Ubirimi\Repository\General\UbirimiClient;
use Ubirimi\SystemProduct;
use Ubirimi\UbirimiController;
use Ubirimi\Util;
use Ubirimi\Yongo\Event\IssueEvent;
use Ubirimi\Yongo\Event\YongoEvents;
use Ubirimi\Yongo\Repository\Field\Field;
use Ubirimi\Yongo\Repository\Project\YongoProject;
class SaveController extends UbirimiController
{
public function indexAction(Request $request, SessionInterface $session)
{
Util::checkUserIsLoggedInAndRedirect();
$clientSettings = $this->getRepository(UbirimiClient::class)->getSettings($session->get('client/id'));
$timeTrackingDefaultUnit = $session->get('yongo/settings/time_tracking_default_unit');
$projectId = $request->request->get('project_id');
$issueId = $request->request->get('issue_id');
$attachIdsToBeKept = $request->request->get('attach_ids');
$fieldTypes = $request->request->get('field_types');
$fieldValues = $request->request->get('field_values');
$fieldTypesCustom = $request->request->get('field_types_custom');
$fieldValuesCustom = $request->request->get('field_values_custom');
if (!is_array($attachIdsToBeKept)) {
$attachIdsToBeKept = array();
}
$issueSystemFieldsData = array();
$issueCustomFieldsData = array();
for ($i = 0; $i < count($fieldTypes); $i++) {
if ($fieldValues[$i] != 'null' && $fieldValues[$i] != '') {
$issueSystemFieldsData[$fieldTypes[$i]] = $fieldValues[$i];
}
else {
$issueSystemFieldsData[$fieldTypes[$i]] = null;
}
}
for ($i = 0; $i < count($fieldTypesCustom); $i++) {
if ($fieldValuesCustom[$i] != 'null' && $fieldValuesCustom[$i] != '') {
$issueCustomFieldsData[$fieldTypesCustom[$i]] = $fieldValuesCustom[$i];
} else {
$issueCustomFieldsData[$fieldTypesCustom[$i]] = null;
}
}
if (!$projectId) {
$projectId = $issueSystemFieldsData['project'];
}
$project = $this->getRepository(YongoProject::class)->getById($projectId);
if (array_key_exists(Field::FIELD_ASSIGNEE_CODE, $issueSystemFieldsData)) {
// assignee field is placed on screen
if ($issueSystemFieldsData[Field::FIELD_ASSIGNEE_CODE] == -1) {
$issueSystemFieldsData[Field::FIELD_ASSIGNEE_CODE] = null;
}
} else {
// put the assignee as the project default assignee
$issueSystemFieldsData[Field::FIELD_ASSIGNEE_CODE] = $project['lead_id'];
}
$issueSystemFieldsData['helpdesk_flag'] = 0;
if ($session->get("selected_product_id") == SystemProduct::SYS_PRODUCT_HELP_DESK) {
$issueSystemFieldsData['helpdesk_flag'] = 1;
}
$issueSystemFieldsData['user_reported_ip'] = Util::getClientIP();
$issue = UbirimiContainer::get()['issue']->save(
$project,
$issueSystemFieldsData,
$issueId,
$timeTrackingDefaultUnit,
$projectId,
$issueCustomFieldsData,
$attachIdsToBeKept,
$clientSettings,
$session->get('user/id'),
$session->get('client/id')
);
$issueEvent = new IssueEvent($issue, $project, IssueEvent::STATUS_NEW);
$this->getLogger()->addInfo('ADD Yongo issue ' . $project['code'] . '-' . $issue['nr'], $this->getLoggerContext());
UbirimiContainer::get()['dispatcher']->dispatch(YongoEvents::YONGO_ISSUE, $issueEvent);
UbirimiContainer::get()['dispatcher']->dispatch(YongoEvents::YONGO_ISSUE_EMAIL, $issueEvent);
// clean the search information
$session->remove('array_ids');
$session->remove('last_search_parameters');
return new Response('New Issue Created <a href="/yongo/issue/' . $issue['id'] . '">' . $project['code'] . '-' . $issue['nr'] . '</a>');
}
}