This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /** |
||
4 | * Directus – <http://getdirectus.com> |
||
5 | * |
||
6 | * @link The canonical repository – <https://github.com/directus/directus> |
||
7 | * @copyright Copyright 2006-2016 RANGER Studio, LLC – <http://rangerstudio.com> |
||
8 | * @license GNU General Public License (v3) – <http://www.gnu.org/copyleft/gpl.html> |
||
9 | */ |
||
10 | |||
11 | namespace Directus\SDK; |
||
12 | |||
13 | use Directus\Database\Connection; |
||
14 | use Directus\Database\Object\Column; |
||
15 | use Directus\Database\Object\Table; |
||
16 | use Directus\Database\TableGateway\BaseTableGateway; |
||
17 | use Directus\Database\TableGateway\DirectusActivityTableGateway; |
||
18 | use Directus\Database\TableGateway\DirectusMessagesTableGateway; |
||
19 | use Directus\Database\TableGateway\DirectusPreferencesTableGateway; |
||
20 | use Directus\Database\TableGateway\DirectusPrivilegesTableGateway; |
||
21 | use Directus\Database\TableGateway\DirectusSettingsTableGateway; |
||
22 | use Directus\Database\TableGateway\DirectusUiTableGateway; |
||
23 | use Directus\Database\TableGateway\DirectusUsersTableGateway; |
||
24 | use Directus\Database\TableGateway\RelationalTableGateway; |
||
25 | use Directus\Database\TableSchema; |
||
26 | use Directus\Util\ArrayUtils; |
||
27 | use Directus\Util\SchemaUtils; |
||
28 | use Directus\Util\StringUtils; |
||
29 | use Zend\Db\Sql\Predicate\In; |
||
30 | |||
31 | /** |
||
32 | * Client Local |
||
33 | * |
||
34 | * Client to Interact with the database directly using Directus Database Component |
||
35 | * |
||
36 | * @author Welling Guzmán <[email protected]> |
||
37 | */ |
||
38 | class ClientLocal extends AbstractClient |
||
39 | { |
||
40 | /** |
||
41 | * @var BaseTableGateway[] |
||
42 | */ |
||
43 | protected $tableGateways = []; |
||
44 | |||
45 | /** |
||
46 | * @var Connection |
||
47 | */ |
||
48 | protected $connection = null; |
||
49 | |||
50 | /** |
||
51 | * ClientLocal constructor. |
||
52 | * |
||
53 | * @param $connection |
||
54 | */ |
||
55 | public function __construct($connection) |
||
56 | { |
||
57 | $this->connection = $connection; |
||
58 | } |
||
59 | |||
60 | /** |
||
61 | * @inheritDoc |
||
62 | */ |
||
63 | public function getTables(array $params = []) |
||
64 | { |
||
65 | $tables = array_map(function(Table $table) { |
||
66 | return $table->toArray(); |
||
67 | }, TableSchema::getTablesSchema($params)); |
||
68 | |||
69 | return $this->createResponseFromData(['data' => $tables]); |
||
70 | } |
||
71 | |||
72 | /** |
||
73 | * @inheritDoc |
||
74 | */ |
||
75 | public function getTable($tableName) |
||
76 | { |
||
77 | return $this->createResponseFromData(['data' => TableSchema::getSchemaArray($tableName)]); |
||
78 | } |
||
79 | |||
80 | /** |
||
81 | * @inheritDoc |
||
82 | */ |
||
83 | public function getColumns($tableName, array $params = []) |
||
84 | { |
||
85 | $columns = array_map(function(Column $column) { |
||
86 | return $column->toArray(); |
||
87 | }, TableSchema::getTableColumnsSchema($tableName, $params)); |
||
88 | |||
89 | return $this->createResponseFromData(['data' => $columns]); |
||
90 | } |
||
91 | |||
92 | /** |
||
93 | * @inheritDoc |
||
94 | */ |
||
95 | public function getColumn($tableName, $columnName) |
||
96 | { |
||
97 | return $this->createResponseFromData([ |
||
98 | 'data' => TableSchema::getColumnSchema($tableName, $columnName)->toArray() |
||
99 | ]); |
||
100 | } |
||
101 | |||
102 | /** |
||
103 | * @inheritDoc |
||
104 | */ |
||
105 | public function getItems($tableName, array $params = []) |
||
106 | { |
||
107 | $tableGateway = $this->getTableGateway($tableName); |
||
108 | |||
109 | return $this->createResponseFromData($tableGateway->getItems($params)); |
||
110 | } |
||
111 | |||
112 | /** |
||
113 | * @inheritDoc |
||
114 | */ |
||
115 | public function getItem($tableName, $id, array $params = []) |
||
116 | { |
||
117 | // @TODO: Dynamic ID |
||
118 | return $this->getItems($tableName, array_merge($params, [ |
||
119 | 'id' => $id |
||
120 | ])); |
||
121 | } |
||
122 | |||
123 | /** |
||
124 | * @inheritDoc |
||
125 | */ |
||
126 | public function getUsers(array $params = []) |
||
127 | { |
||
128 | // @TODO: store the directus tables somewhere (SchemaManager?) |
||
129 | return $this->getItems('directus_users', $params); |
||
130 | } |
||
131 | |||
132 | /** |
||
133 | * @inheritDoc |
||
134 | */ |
||
135 | public function getUser($id, array $params = []) |
||
136 | { |
||
137 | return $this->getItem('directus_users', $id, $params); |
||
138 | } |
||
139 | |||
140 | /** |
||
141 | * @inheritDoc |
||
142 | */ |
||
143 | public function getGroups(array $params = []) |
||
144 | { |
||
145 | return $this->getItems('directus_groups', $params); |
||
146 | } |
||
147 | |||
148 | /** |
||
149 | * @inheritDoc |
||
150 | */ |
||
151 | public function getGroup($id, array $params = []) |
||
152 | { |
||
153 | return $this->getItem('directus_groups', $id, $params); |
||
154 | } |
||
155 | |||
156 | /** |
||
157 | * @inheritDoc |
||
158 | */ |
||
159 | public function getGroupPrivileges($groupID) |
||
160 | { |
||
161 | $this->getItems('directus_privileges', [ |
||
162 | 'filter' => [ |
||
163 | 'group_id' => ['eq' => $groupID] |
||
164 | ] |
||
165 | ]); |
||
166 | } |
||
167 | |||
168 | /** |
||
169 | * @inheritDoc |
||
170 | */ |
||
171 | public function getFiles(array $params = []) |
||
172 | { |
||
173 | return $this->getItems('directus_files', $params); |
||
174 | } |
||
175 | |||
176 | /** |
||
177 | * @inheritDoc |
||
178 | */ |
||
179 | public function getFile($id, array $params = []) |
||
180 | { |
||
181 | return $this->getItem('directus_files', $id, $params); |
||
182 | } |
||
183 | |||
184 | /** |
||
185 | * @inheritDoc |
||
186 | */ |
||
187 | public function getSettings() |
||
188 | { |
||
189 | return $this->getItems('directus_settings'); |
||
190 | } |
||
191 | |||
192 | /** |
||
193 | * @inheritDoc |
||
194 | */ |
||
195 | View Code Duplication | public function getSettingsByCollection($collectionName) |
|
196 | { |
||
197 | $connection = $this->container->get('connection'); |
||
198 | $acl = $this->container->get('acl'); |
||
199 | $tableGateway = new DirectusSettingsTableGateway($connection, $acl); |
||
200 | |||
201 | $data = [ |
||
202 | 'meta' => [ |
||
203 | 'table' => 'directus_settings', |
||
204 | 'type' => 'entry', |
||
205 | 'settings_collection' => $collectionName |
||
206 | ], |
||
207 | 'data' => $tableGateway->fetchCollection($collectionName) |
||
208 | ]; |
||
209 | |||
210 | return $this->createResponseFromData($data); |
||
211 | } |
||
212 | |||
213 | /** |
||
214 | * @inheritdoc |
||
215 | */ |
||
216 | public function updateSettings($collection, array $data) |
||
217 | { |
||
218 | $connection = $this->container->get('connection'); |
||
219 | $acl = $this->container->get('acl'); |
||
220 | $tableGateway = new DirectusSettingsTableGateway($connection, $acl); |
||
221 | |||
222 | $tableGateway->setValues($collection, $data); |
||
223 | |||
224 | return $this->getSettingsByCollection($collection); |
||
225 | } |
||
226 | |||
227 | /** |
||
228 | * @inheritDoc |
||
229 | */ |
||
230 | View Code Duplication | public function getMessages($userId = null) |
|
231 | { |
||
232 | $connection = $this->container->get('connection'); |
||
233 | $acl = $this->container->get('acl'); |
||
234 | |||
235 | if ($userId === null) { |
||
236 | $userId = $acl->getUserId(); |
||
237 | } |
||
238 | |||
239 | $messagesTableGateway = new DirectusMessagesTableGateway($connection, $acl); |
||
240 | $result = $messagesTableGateway->fetchMessagesInboxWithHeaders($userId); |
||
241 | |||
242 | return $this->createResponseFromData($result); |
||
243 | } |
||
244 | |||
245 | View Code Duplication | public function getMessage($id, $userId = null) |
|
246 | { |
||
247 | $connection = $this->container->get('connection'); |
||
248 | $acl = $this->container->get('acl'); |
||
249 | |||
250 | if ($userId === null) { |
||
251 | $userId = $acl->getUserId(); |
||
252 | } |
||
253 | |||
254 | $messagesTableGateway = new DirectusMessagesTableGateway($connection, $acl); |
||
255 | $message = $messagesTableGateway->fetchMessageWithRecipients($id, $userId); |
||
256 | |||
257 | return $this->createResponseFromData($message); |
||
258 | } |
||
259 | |||
260 | /** |
||
261 | * @inheritDoc |
||
262 | */ |
||
263 | View Code Duplication | public function createItem($tableName, array $data) |
|
264 | { |
||
265 | $tableGateway = $this->getTableGateway($tableName); |
||
266 | $data = $this->processData($tableName, $data); |
||
267 | |||
268 | foreach($data as $key => $value) { |
||
269 | if ($value instanceof File) { |
||
270 | $data[$key] = $this->processFile($value); |
||
271 | } |
||
272 | } |
||
273 | |||
274 | $newRecord = $tableGateway->manageRecordUpdate($tableName, $data); |
||
275 | |||
276 | return $this->getItem($tableName, $newRecord[$tableGateway->primaryKeyFieldName]); |
||
277 | } |
||
278 | |||
279 | /** |
||
280 | * @inheritDoc |
||
281 | */ |
||
282 | View Code Duplication | public function updateItem($tableName, $id, array $data) |
|
283 | { |
||
284 | $tableGateway = $this->getTableGateway($tableName); |
||
285 | $data = $this->processData($tableName, $data); |
||
286 | |||
287 | foreach($data as $key => $value) { |
||
288 | if ($value instanceof File) { |
||
289 | $data[$key] = $this->processFile($value); |
||
290 | } |
||
291 | } |
||
292 | |||
293 | $updatedRecord = $tableGateway->manageRecordUpdate($tableName, array_merge($data, ['id' => $id])); |
||
294 | |||
295 | return $this->getItem($tableName, $updatedRecord[$tableGateway->primaryKeyFieldName]); |
||
296 | } |
||
297 | |||
298 | /** |
||
299 | * @inheritDoc |
||
300 | */ |
||
301 | public function deleteItem($tableName, $ids, $hard = false) |
||
302 | { |
||
303 | // @TODO: Accept EntryCollection and Entry |
||
304 | $tableGateway = $this->getTableGateway($tableName); |
||
305 | |||
306 | if (!is_array($ids)) { |
||
307 | $ids = [$ids]; |
||
308 | } |
||
309 | |||
310 | if ($hard === true) { |
||
311 | return $tableGateway->delete(function($delete) use ($ids) { |
||
312 | return $delete->where->in('id', $ids); |
||
313 | }); |
||
314 | } |
||
315 | |||
316 | if (!$tableGateway->getTableSchema()->hasStatusColumn()) { |
||
317 | throw new \Exception('Cannot soft-delete. Table has not status column.'); |
||
318 | } |
||
319 | |||
320 | return $tableGateway->update([ |
||
321 | $tableGateway->getStatusColumnName() => $tableGateway->getDeletedValue() |
||
322 | ], new In('id', $ids)); |
||
323 | } |
||
324 | |||
325 | /** |
||
326 | * @inheritDoc |
||
327 | */ |
||
328 | public function createUser(array $data) |
||
329 | { |
||
330 | return $this->createItem('directus_users', $data); |
||
331 | } |
||
332 | |||
333 | /** |
||
334 | * @inheritDoc |
||
335 | */ |
||
336 | public function updateUser($id, array $data) |
||
337 | { |
||
338 | return $this->updateItem('directus_users', $id, $data); |
||
339 | } |
||
340 | |||
341 | /** |
||
342 | * @inheritDoc |
||
343 | */ |
||
344 | public function deleteUser($ids, $hard = false) |
||
345 | { |
||
346 | return $this->deleteItem('directus_users', $ids, $hard); |
||
347 | } |
||
348 | |||
349 | /** |
||
350 | * @inheritDoc |
||
351 | */ |
||
352 | public function createFile(File $file) |
||
353 | { |
||
354 | $data = $this->processFile($file); |
||
355 | |||
356 | return $this->createItem('directus_files', $data); |
||
357 | } |
||
358 | |||
359 | /** |
||
360 | * @inheritDoc |
||
361 | */ |
||
362 | public function updateFile($id, $data) |
||
363 | { |
||
364 | if ($data instanceof File) { |
||
365 | $data = $this->processFile($data); |
||
366 | } |
||
367 | |||
368 | return $this->updateItem('directus_files', $id, $data); |
||
369 | } |
||
370 | |||
371 | /** |
||
372 | * @inheritDoc |
||
373 | */ |
||
374 | public function deleteFile($ids, $hard = false) |
||
375 | { |
||
376 | return $this->deleteItem('directus_files', $ids, $hard); |
||
377 | } |
||
378 | |||
379 | public function createPreferences($data) |
||
380 | { |
||
381 | if (!ArrayUtils::contains($data, ['title', 'table_name'])) { |
||
382 | throw new \Exception('title and table_name are required'); |
||
383 | } |
||
384 | |||
385 | $acl = $this->container->get('acl'); |
||
386 | $data['user'] = $acl->getUserId(); |
||
387 | |||
388 | return $this->createItem('directus_preferences', $data); |
||
389 | } |
||
390 | |||
391 | /** |
||
392 | * @inheritdoc |
||
393 | */ |
||
394 | public function createBookmark($data) |
||
395 | { |
||
396 | $acl = $this->container->get('acl'); |
||
397 | $data['user'] = $acl->getUserId(); |
||
398 | |||
399 | $preferences = $this->createPreferences(ArrayUtils::pick($data, [ |
||
400 | 'title', 'table_name', 'sort', 'status', 'search_string', 'sort_order', 'columns_visible', 'user' |
||
401 | ])); |
||
402 | |||
403 | $title = $preferences->title; |
||
404 | $tableName = $preferences->table_name; |
||
405 | $bookmarkData = [ |
||
406 | 'section' => 'search', |
||
407 | 'title' => $title, |
||
408 | 'url' => 'tables/' . $tableName . '/pref/' . $title, |
||
409 | 'user' => $data['user'] |
||
410 | ]; |
||
411 | |||
412 | return $this->createItem('directus_bookmarks', $bookmarkData); |
||
413 | } |
||
414 | |||
415 | /** |
||
416 | * @inheritdoc |
||
417 | */ |
||
418 | public function getBookmark($id) |
||
419 | { |
||
420 | return $this->getItem('directus_bookmarks', $id); |
||
421 | } |
||
422 | |||
423 | /** |
||
424 | * @inheritdoc |
||
425 | */ |
||
426 | public function getBookmarks($userId = null) |
||
427 | { |
||
428 | $filters = []; |
||
429 | if ($userId !== null) { |
||
430 | $filters = [ |
||
431 | 'filters' => ['user' => ['eq' => $userId]] |
||
432 | ]; |
||
433 | } |
||
434 | |||
435 | return $this->getItems('directus_bookmarks', $filters); |
||
436 | } |
||
437 | |||
438 | /** |
||
439 | * @inheritdoc |
||
440 | */ |
||
441 | public function createColumn($data) |
||
442 | { |
||
443 | $data = $this->parseColumnData($data); |
||
444 | |||
445 | $tableGateway = $this->getTableGateway($data['table_name']); |
||
446 | |||
447 | $tableGateway->addColumn($data['table_name'], ArrayUtils::omit($data, ['table_name'])); |
||
448 | |||
449 | return $this->getColumn($data['table_name'], $data['column_name']); |
||
450 | } |
||
451 | |||
452 | /** |
||
453 | * @inheritdoc |
||
454 | */ |
||
455 | public function createGroup(array $data) |
||
456 | { |
||
457 | return $this->createItem('directus_groups', $data); |
||
458 | } |
||
459 | |||
460 | /** |
||
461 | * @inheritdoc |
||
462 | */ |
||
463 | public function createMessage(array $data) |
||
464 | { |
||
465 | $this->requiredAttributes(['from', 'message', 'subject'], $data); |
||
466 | $this->requiredOneAttribute(['to', 'toGroup'], $data); |
||
467 | |||
468 | $recipients = $this->getMessagesTo($data); |
||
469 | $recipients = explode(',', $recipients); |
||
470 | ArrayUtils::remove($data, ['to', 'toGroup']); |
||
471 | |||
472 | $groupRecipients = []; |
||
473 | $userRecipients = []; |
||
474 | foreach ($recipients as $recipient) { |
||
475 | $typeAndId = explode('_', $recipient); |
||
476 | if ($typeAndId[0] == 0) { |
||
477 | $userRecipients[] = $typeAndId[1]; |
||
478 | } else { |
||
479 | $groupRecipients[] = $typeAndId[1]; |
||
480 | } |
||
481 | } |
||
482 | |||
483 | $ZendDb = $this->container->get('connection'); |
||
0 ignored issues
–
show
|
|||
484 | $acl = $this->container->get('acl'); |
||
485 | if (count($groupRecipients) > 0) { |
||
486 | $usersTableGateway = new DirectusUsersTableGateway($ZendDb, $acl); |
||
0 ignored issues
–
show
$ZendDb does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
487 | $result = $usersTableGateway->findActiveUserIdsByGroupIds($groupRecipients); |
||
488 | foreach ($result as $item) { |
||
489 | $userRecipients[] = $item['id']; |
||
490 | } |
||
491 | } |
||
492 | |||
493 | $userRecipients[] = $acl->getUserId(); |
||
494 | |||
495 | $messagesTableGateway = new DirectusMessagesTableGateway($ZendDb, $acl); |
||
0 ignored issues
–
show
$ZendDb does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
496 | $id = $messagesTableGateway->sendMessage($data, array_unique($userRecipients), $acl->getUserId()); |
||
497 | |||
498 | if ($id) { |
||
499 | $Activity = new DirectusActivityTableGateway($ZendDb, $acl); |
||
0 ignored issues
–
show
$Activity does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
500 | $data['id'] = $id; |
||
501 | $Activity->recordMessage($data, $acl->getUserId()); |
||
0 ignored issues
–
show
$Activity does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
502 | } |
||
503 | |||
504 | $message = $messagesTableGateway->fetchMessageWithRecipients($id, $acl->getUserId()); |
||
505 | $response = [ |
||
506 | 'meta' => [ |
||
507 | 'type' => 'item', |
||
508 | 'table' => 'directus_messages' |
||
509 | ], |
||
510 | 'data' => $message |
||
511 | ]; |
||
512 | |||
513 | return $this->createResponseFromData($response); |
||
514 | } |
||
515 | |||
516 | /** |
||
517 | * @inheritdoc |
||
518 | */ |
||
519 | public function sendMessage(array $data) |
||
520 | { |
||
521 | return $this->createMessage($data); |
||
522 | } |
||
523 | |||
524 | View Code Duplication | public function createPrivileges(array $data) |
|
525 | { |
||
526 | $connection = $this->container->get('connection'); |
||
527 | $acl = $this->container->get('acl'); |
||
528 | $privileges = new DirectusPrivilegesTableGateway($connection, $acl); |
||
529 | |||
530 | $response = [ |
||
531 | 'meta' => [ |
||
532 | 'type' => 'item', |
||
533 | 'table' => 'directus_privileges' |
||
534 | ], |
||
535 | 'data' => $privileges->insertPrivilege($data) |
||
536 | ]; |
||
537 | |||
538 | return $this->createResponseFromData($response); |
||
539 | } |
||
540 | |||
541 | public function createTable($name, array $data = []) |
||
542 | { |
||
543 | $isTableNameAlphanumeric = preg_match("/[a-z0-9]+/i", $name); |
||
544 | $zeroOrMoreUnderscoresDashes = preg_match("/[_-]*/i", $name); |
||
545 | |||
546 | if (!($isTableNameAlphanumeric && $zeroOrMoreUnderscoresDashes)) { |
||
547 | return $this->createResponseFromData(['error' => ['message' => 'invalid_table_name']]); |
||
548 | } |
||
549 | |||
550 | $schema = $this->container->get('schemaManager'); |
||
551 | $emitter = $this->container->get('emitter'); |
||
552 | if (!$schema->tableExists($name)) { |
||
553 | $emitter->run('table.create:before', $name); |
||
554 | // Through API: |
||
555 | // Remove spaces and symbols from table name |
||
556 | // And in lowercase |
||
557 | $name = SchemaUtils::cleanTableName($name); |
||
558 | $schema->createTable($name); |
||
559 | $emitter->run('table.create', $name); |
||
560 | $emitter->run('table.create:after', $name); |
||
561 | } |
||
562 | |||
563 | $connection = $this->container->get('connection'); |
||
564 | $acl = $this->container->get('acl'); |
||
565 | $privileges = new DirectusPrivilegesTableGateway($connection, $acl); |
||
566 | |||
567 | return $this->createResponseFromData($privileges->insertPrivilege([ |
||
568 | 'group_id' => 1, |
||
569 | 'table_name' => $name |
||
570 | ])); |
||
571 | } |
||
572 | |||
573 | /** |
||
574 | * @inheritdoc |
||
575 | */ |
||
576 | public function createColumnUIOptions(array $data) |
||
577 | { |
||
578 | $this->requiredAttributes(['table', 'column', 'ui', 'options'], $data); |
||
579 | $tableGateway = $this->getTableGateway('directus_ui'); |
||
580 | |||
581 | $table = $data['table']; |
||
582 | $column = $data['column']; |
||
583 | $ui = $data['ui']; |
||
584 | |||
585 | $data = $data['options']; |
||
586 | $keys = ['table_name' => $table, 'column_name' => $column, 'ui_name' => $ui]; |
||
587 | $uis = to_name_value($data, $keys); |
||
588 | |||
589 | $column_settings = []; |
||
0 ignored issues
–
show
$column_settings does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
590 | foreach ($uis as $col) { |
||
591 | $existing = $tableGateway->select(['table_name' => $table, 'column_name' => $column, 'ui_name' => $ui, 'name' => $col['name']])->toArray(); |
||
592 | if (count($existing) > 0) { |
||
593 | $col['id'] = $existing[0]['id']; |
||
594 | } |
||
595 | array_push($column_settings, $col); |
||
0 ignored issues
–
show
$column_settings does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
596 | } |
||
597 | $tableGateway->updateCollection($column_settings); |
||
0 ignored issues
–
show
$column_settings does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
598 | |||
599 | $connection = $this->container->get('connection'); |
||
600 | $acl = $this->container->get('acl'); |
||
601 | $UiOptions = new DirectusUiTableGateway($connection, $acl); |
||
0 ignored issues
–
show
$UiOptions does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
602 | $response = $UiOptions->fetchOptions($table, $column, $ui); |
||
0 ignored issues
–
show
$UiOptions does not seem to conform to the naming convention (^[a-z][a-zA-Z0-9]*$ ).
This check examines a number of code elements and verifies that they conform to the given naming conventions. You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods. ![]() |
|||
603 | |||
604 | if (!$response) { |
||
605 | $response = [ |
||
606 | 'error' => [ |
||
607 | 'message' => sprintf('unable_to_find_column_%s_options_for_%s', ['column' => $column, 'ui' => $ui]) |
||
608 | ], |
||
609 | 'success' => false |
||
610 | ]; |
||
611 | } else { |
||
612 | $response = [ |
||
613 | 'meta' => [ |
||
614 | 'type' => 'item', |
||
615 | 'table' => 'directus_ui' |
||
616 | ], |
||
617 | 'data' => $response |
||
618 | ]; |
||
619 | } |
||
620 | |||
621 | return $this->createResponseFromData($response); |
||
622 | } |
||
623 | |||
624 | View Code Duplication | public function getPreferences($table, $user) |
|
625 | { |
||
626 | $acl = $this->container->get('acl'); |
||
627 | $connection = $this->container->get('connection'); |
||
628 | $preferencesTableGateway = new DirectusPreferencesTableGateway($connection, $acl); |
||
629 | |||
630 | $response = [ |
||
631 | 'meta' => [ |
||
632 | 'type' => 'item', |
||
633 | 'table' => 'directus_preferences' |
||
634 | ], |
||
635 | 'data' => $preferencesTableGateway->fetchByUserAndTableAndTitle($user, $table) |
||
636 | ]; |
||
637 | |||
638 | return $this->createResponseFromData($response); |
||
639 | } |
||
640 | |||
641 | /** |
||
642 | * @inheritdoc |
||
643 | */ |
||
644 | public function deleteBookmark($id, $hard = false) |
||
645 | { |
||
646 | return $this->deleteItem('directus_bookmarks', $id, $hard); |
||
647 | } |
||
648 | |||
649 | /** |
||
650 | * @inheritdoc |
||
651 | */ |
||
652 | View Code Duplication | public function deleteColumn($name, $table) |
|
653 | { |
||
654 | $tableGateway = $this->getTableGateway($table); |
||
655 | $success = $tableGateway->dropColumn($name); |
||
656 | |||
657 | $response = [ |
||
658 | 'success' => (bool) $success |
||
659 | ]; |
||
660 | |||
661 | if (!$success) { |
||
662 | $response['error'] = [ |
||
663 | 'message' => sprintf('unable_to_remove_column_%s', ['column_name' => $name]) |
||
664 | ]; |
||
665 | } |
||
666 | |||
667 | return $this->createResponseFromData($response); |
||
668 | } |
||
669 | |||
670 | /** |
||
671 | * @inheritdoc |
||
672 | */ |
||
673 | public function deleteGroup($id, $hard = false) |
||
674 | { |
||
675 | return $this->deleteItem('directus_groups', $id, $hard); |
||
676 | } |
||
677 | |||
678 | /** |
||
679 | * @inheritdoc |
||
680 | */ |
||
681 | View Code Duplication | public function deleteTable($name) |
|
682 | { |
||
683 | $tableGateway = $this->getTableGateway($name); |
||
684 | $success = $tableGateway->drop(); |
||
685 | |||
686 | $response = [ |
||
687 | 'success' => (bool) $success |
||
688 | ]; |
||
689 | |||
690 | if (!$success) { |
||
691 | $response['error'] = [ |
||
692 | 'message' => sprintf('unable_to_remove_table_%s', ['table_name' => $name]) |
||
693 | ]; |
||
694 | } |
||
695 | |||
696 | return $this->createResponseFromData($response); |
||
697 | } |
||
698 | |||
699 | public function getActivity(array $params = []) |
||
700 | { |
||
701 | $connection = $this->container->get('connection'); |
||
702 | $acl = $this->container->get('acl'); |
||
703 | $tableGateway = new DirectusActivityTableGateway($connection, $acl); |
||
704 | |||
705 | $data = $tableGateway->fetchFeed($params); |
||
706 | |||
707 | return $this->createResponseFromData($data); |
||
708 | } |
||
709 | |||
710 | /** |
||
711 | * @inheritdoc |
||
712 | */ |
||
713 | public function getRandom(array $options = []) |
||
714 | { |
||
715 | $length = (int) ArrayUtils::get($options, 'length', 32); |
||
716 | |||
717 | return $this->createResponseFromData([ |
||
718 | 'success' => true, |
||
719 | 'data' => [ |
||
720 | 'random' => StringUtils::randomString($length) |
||
721 | ] |
||
722 | ]); |
||
723 | } |
||
724 | |||
725 | /** |
||
726 | * @inheritdoc |
||
727 | */ |
||
728 | public function getHash($string, array $options = []) |
||
729 | { |
||
730 | $hashManager = $this->container->get('hashManager'); |
||
731 | |||
732 | try { |
||
733 | $hash = $hashManager->hash($string, $options); |
||
734 | $data = [ |
||
735 | 'success' => true, |
||
736 | 'data' => [ |
||
737 | 'hash' => $hash |
||
738 | ] |
||
739 | ]; |
||
740 | } catch (\Exception $e) { |
||
741 | $data = [ |
||
742 | 'success' => false, |
||
743 | 'error' => [ |
||
744 | 'message' => $e->getMessage() |
||
745 | ] |
||
746 | ]; |
||
747 | } |
||
748 | |||
749 | return $this->createResponseFromData($data); |
||
750 | } |
||
751 | |||
752 | /** |
||
753 | * Get a table gateway for the given table name |
||
754 | * |
||
755 | * @param $tableName |
||
756 | * |
||
757 | * @return RelationalTableGateway |
||
758 | */ |
||
759 | protected function getTableGateway($tableName) |
||
760 | { |
||
761 | if (!array_key_exists($tableName, $this->tableGateways)) { |
||
762 | $acl = TableSchema::getAclInstance(); |
||
763 | $this->tableGateways[$tableName] = new RelationalTableGateway($tableName, $this->connection, $acl); |
||
764 | } |
||
765 | |||
766 | return $this->tableGateways[$tableName]; |
||
767 | } |
||
768 | |||
769 | public function processDataOnDirectusUsers($data) |
||
770 | { |
||
771 | $data = parent::processDataOnDirectusUsers($data); |
||
772 | |||
773 | if (ArrayUtils::has($data, 'password')) { |
||
774 | // @TODO: use Auth hash password |
||
775 | $data['password'] = password_hash($data['password'], PASSWORD_DEFAULT, ['cost' => 12]); |
||
776 | } |
||
777 | |||
778 | return $data; |
||
779 | } |
||
780 | } |
||
781 |
This check examines a number of code elements and verifies that they conform to the given naming conventions.
You can set conventions for local variables, abstract classes, utility classes, constant, properties, methods, parameters, interfaces, classes, exceptions and special methods.