Passed
Pull Request — developer (#15952)
by Arkadiusz
31:16 queued 15:09
created

Calendar_Calendar_Action::getEvents()   B

Complexity

Conditions 7
Paths 24

Size

Total Lines 29
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 29
ccs 0
cts 21
cp 0
rs 8.6346
c 0
b 0
f 0
cc 7
nc 24
nop 1
crap 56
1
<?php
2
3
/**
4
 * Calendar action class.
5
 *
6
 * @copyright YetiForce S.A.
7
 * @license   YetiForce Public License 5.0 (licenses/LicenseEN.txt or yetiforce.com)
8
 */
9
class Calendar_Calendar_Action extends Vtiger_BasicAjax_Action
10
{
11
	use \App\Controller\ExposeMethod;
12
13
	/**
14
	 * Function to check permission.
15
	 *
16
	 * @param \App\Request $request
17
	 *
18
	 * @throws \App\Exceptions\NoPermitted
19
	 */
20
	public function checkPermission(App\Request $request)
21
	{
22
		$userPrivilegesModel = Users_Privileges_Model::getCurrentUserPrivilegesModel();
23
		if (!$userPrivilegesModel->hasModulePermission($request->getModule())) {
0 ignored issues
show
Bug introduced by
$request->getModule() of type string is incompatible with the type integer expected by parameter $mixed of Users_Privileges_Model::hasModulePermission(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

23
		if (!$userPrivilegesModel->hasModulePermission(/** @scrutinizer ignore-type */ $request->getModule())) {
Loading history...
24
			throw new \App\Exceptions\NoPermitted('LBL_PERMISSION_DENIED', 406);
25
		}
26
		if ('updateEvent' === $request->getMode() && ($request->isEmpty('id', true) || !\App\Privilege::isPermitted($request->getModule(), 'EditView', $request->getInteger('id')))) {
27
			throw new \App\Exceptions\NoPermittedToRecord('ERR_NO_PERMISSIONS_FOR_THE_RECORD', 406);
28
		}
29
	}
30
31
	public function __construct()
32
	{
33
		parent::__construct();
34
		$this->exposeMethod('getEvents');
35
		$this->exposeMethod('getEventsYear');
36
		$this->exposeMethod('getCountEvents');
37
		$this->exposeMethod('updateEvent');
38
		$this->exposeMethod('getCountEventsGroup');
39
		$this->exposeMethod('pinOrUnpinUser');
40
	}
41
42
	public function getEvents(App\Request $request)
43
	{
44
		$record = Calendar_Calendar_Model::getCleanInstance();
45
		$record->set('user', $request->getArray('user', 'Alnum'));
46
		$record->set('types', $request->getArray('types', 'Text'));
47
		$record->set('time', $request->getByType('time'));
48
		if ($request->has('start') && $request->has('end')) {
49
			$record->set('start', $request->getByType('start', 'DateInUserFormat'));
50
			$record->set('end', $request->getByType('end', 'DateInUserFormat'));
51
		}
52
		if ($request->has('filters')) {
53
			$record->set('filters', $request->getByType('filters', 'Alnum'));
54
		}
55
		if ($request->has('cvid')) {
56
			$record->set('customFilter', $request->getInteger('cvid'));
57
		}
58
		if ($request->getBoolean('widget')) {
59
			$record->set('customFilter', $request->getByType('customFilter', 2));
60
			$entity = array_merge($record->getEntityCount(), $record->getPublicHolidays());
61
		} else {
62
			if ($request->getBoolean('yearView')) {
63
				$entity = array_merge($record->getEntityCount(), $record->getPublicHolidays());
64
			} else {
65
				$entity = array_merge($record->getEntity(), $record->getPublicHolidays());
66
			}
67
		}
68
		$response = new Vtiger_Response();
69
		$response->setResult($entity);
70
		$response->emit();
71
	}
72
73
	/**
74
	 * Get events for year view.
75
	 *
76
	 * @param \App\Request $request
77
	 */
78
	public function getEventsYear(App\Request $request)
79
	{
80
		$record = Calendar_Calendar_Model::getCleanInstance();
81
		$record->set('user', $request->getArray('user', 'Alnum'));
82
		$record->set('time', $request->getByType('time'));
83
		if ($request->has('start') && $request->has('end')) {
84
			$record->set('start', $request->getByType('start', 'DateInUserFormat'));
85
			$record->set('end', $request->getByType('end', 'DateInUserFormat'));
86
		}
87
		if ($request->has('filters')) {
88
			$record->set('filters', $request->getByType('filters', 'Alnum'));
89
		}
90
		if ($request->has('cvid')) {
91
			$record->set('customFilter', $request->getInteger('cvid'));
92
		}
93
		$entity = array_merge($record->getEntityYearCount(), $record->getPublicHolidays());
94
		$response = new Vtiger_Response();
95
		$response->setResult($entity);
96
		$response->emit();
97
	}
98
99
	/**
100
	 * Get count Events for extended calendar's left column.
101
	 *
102
	 * @param \App\Request $request
103
	 */
104
	public function getCountEvents(App\Request $request)
105
	{
106
		$record = Calendar_Calendar_Model::getCleanInstance();
107
		$record->set('user', $request->getArray('user', 'Alnum'));
108
		$record->set('types', $request->getArray('types', 'Text'));
109
		$record->set('time', $request->getByType('time'));
110
		if ($request->has('start') && $request->has('end')) {
111
			$record->set('start', $request->getByType('start', 'DateInUserFormat'));
112
			$record->set('end', $request->getByType('end', 'DateInUserFormat'));
113
		}
114
		if ($request->has('filters')) {
115
			$record->set('filters', $request->getByType('filters', 'Alnum'));
116
		}
117
		if ($request->has('cvid')) {
118
			$record->set('customFilter', $request->getInteger('cvid'));
119
		}
120
		$entity = $record->getEntityRecordsCount();
121
		$response = new Vtiger_Response();
122
		$response->setResult($entity);
123
		$response->emit();
124
	}
125
126
	/**
127
	 * Get count Events for extended calendar's left column.
128
	 *
129
	 * @param \App\Request $request
130
	 */
131
	public function getCountEventsGroup(App\Request $request)
132
	{
133
		$record = Calendar_Calendar_Model::getCleanInstance();
134
		$record->set('user', $request->getArray('user', 'Alnum'));
135
		$record->set('types', $request->getArray('types', 'Text'));
136
		$record->set('time', $request->getByType('time'));
137
		if ($request->has('filters')) {
138
			$record->set('filters', $request->getByType('filters', 'Alnum'));
139
		}
140
		if ($request->has('cvid')) {
141
			$record->set('customFilter', $request->getInteger('cvid'));
142
		}
143
		$result = [];
144
		foreach ($request->getArray('dates', 'Date') as $datePair) {
145
			$record->set('start', $datePair[0] . ' 00:00:00');
146
			$record->set('end', $datePair[1] . ' 00:00:00');
147
			$result[] = $record->getEntityRecordsCount();
148
		}
149
		$response = new Vtiger_Response();
150
		$response->setResult($result);
151
		$response->emit();
152
	}
153
154
	public function updateEvent(App\Request $request)
155
	{
156
		$recordId = $request->getInteger('id');
157
		$start = DateTimeField::convertToDBTimeZone($request->getByType('start', 'DateTimeInUserFormat'));
158
		$end = DateTimeField::convertToDBTimeZone($request->getByType('end', 'DateTimeInUserFormat'));
159
		try {
160
			$recordModel = Vtiger_Record_Model::getInstanceById($recordId, $request->getModule());
161
			$recordModel->set('date_start', $start->format('Y-m-d'));
162
			$recordModel->set('due_date', $end->format('Y-m-d'));
163
			if ($request->getBoolean('allDay')) {
164
				$recordModel->set('allday', 1);
165
			} else {
166
				$recordModel->set('time_start', $start->format('H:i:s'));
167
				$recordModel->set('time_end', $end->format('H:i:s'));
168
				$recordModel->set('allday', 0);
169
			}
170
			$recordModel->save();
171
			$success = true;
172
		} catch (Exception $e) {
173
			$success = false;
174
		}
175
		$response = new Vtiger_Response();
176
		$response->setResult($success);
177
		$response->emit();
178
	}
179
180
	/**
181
	 * Get count Events for extended calendar's left column.
182
	 *
183
	 * @param \App\Request $request
184
	 */
185
	public function pinOrUnpinUser(App\Request $request)
186
	{
187
		$db = \App\Db::getInstance();
188
		$userId = \App\User::getCurrentUserId();
189
		if (!$request->isEmpty('element_id')) {
190
			$favouritesId = $request->getInteger('element_id');
191
			if (\App\User::isExists($favouritesId)) {
192
				$query = new \App\Db\Query();
193
				$existsRecords = $query
194
					->from('u_#__users_pinned')
195
					->where(['owner_id' => $userId])
196
					->where(['fav_element_id' => $favouritesId])
197
					->exists();
198
				$data = [
199
					'owner_id' => $userId,
200
					'fav_element_id' => $favouritesId,
201
				];
202
				if (!$existsRecords) {
203
					$db->createCommand()->insert('u_#__users_pinned', $data)->execute();
204
					$result = 'pin';
205
				} else {
206
					$db->createCommand()->delete('u_#__users_pinned', $data)->execute();
207
					$result = 'unpin';
208
				}
209
				\App\Cache::delete('UsersFavourite', $userId);
210
			}
211
		}
212
		$response = new Vtiger_Response();
213
		$response->setResult($result);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $result does not seem to be defined for all execution paths leading up to this point.
Loading history...
214
		$response->emit();
215
	}
216
}
217