Completed
Push — d64 ( 4f8de5...da115c )
by Welling
02:13
created

ClientRemote::getBookmarks()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 1
dl 0
loc 10
ccs 0
cts 6
cp 0
crap 6
rs 9.4285
c 0
b 0
f 0
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
use Directus\Util\ArrayUtils;
13
use Directus\Util\StringUtils;
14
15
/**
16
 * Client Remote
17
 *
18
 * @author Welling Guzmán <[email protected]>
19
 */
20
class ClientRemote extends BaseClientRemote
21
{
22
    /**
23
     * @inheritdoc
24
     */
25 2
    public function getTables(array $params = [])
26
    {
27 2
        return $this->performRequest('GET', static::TABLE_LIST_ENDPOINT);
1 ignored issue
show
Bug Compatibility introduced by
The expression $this->performRequest('G...::TABLE_LIST_ENDPOINT); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 27 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getTables of type Directus\SDK\Response\EntryCollection.
Loading history...
28
    }
29
30
    /**
31
     * @inheritdoc
32
     */
33 4
    public function getTable($tableName)
34
    {
35 4
        $path = $this->buildPath(static::TABLE_INFORMATION_ENDPOINT, $tableName);
36
37 4
        return $this->performRequest('GET', $path);
1 ignored issue
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 37 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getTable of type Directus\SDK\Response\Entry.
Loading history...
38
    }
39
40
    /**
41
     * @inheritdoc
42
     */
43 2
    public function getColumns($tableName, array $params = [])
44
    {
45 2
        $path = $this->buildPath(static::COLUMN_LIST_ENDPOINT, $tableName);
46
47 2
        return $this->performRequest('GET', $path);
1 ignored issue
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 47 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getColumns of type Directus\SDK\Response\EntryCollection.
Loading history...
48
    }
49
50
    /**
51
     * @inheritdoc
52
     */
53 2
    public function getColumn($tableName, $columnName)
54
    {
55 2
        $path = $this->buildPath(static::COLUMN_INFORMATION_ENDPOINT, [$tableName, $columnName]);
56
57 2
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 57 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getColumn of type Directus\SDK\Response\Entry.
Loading history...
58
    }
59
60
    /**
61
     * @inheritdoc
62
     */
63 2
    public function getItems($tableName, array $options = [])
64
    {
65 2
        $path = $this->buildPath(static::TABLE_ENTRIES_ENDPOINT, $tableName);
0 ignored issues
show
Documentation introduced by
$tableName is of type string, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
66
67 2
        return $this->performRequest('GET', $path, ['query' => $options]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('G...('query' => $options)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 67 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getItems of type Directus\SDK\Response\EntryCollection.
Loading history...
68
    }
69
70
    /**
71
     * @inheritdoc
72
     */
73 2
    public function getItem($tableName, $id, array $options = [])
74
    {
75 2
        $path = $this->buildPath(static::TABLE_ENTRY_ENDPOINT, [$tableName, $id]);
76
77 2
        return $this->performRequest('GET', $path, ['query' => $options]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('G...('query' => $options)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 77 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getItem of type Directus\SDK\Response\Entry.
Loading history...
78
    }
79
80
    /**
81
     * @inheritdoc
82
     */
83 2
    public function getUsers(array $params = [])
84
    {
85 2
        return $this->getItems('directus_users', $params);
86
    }
87
88
    /**
89
     * @inheritdoc
90
     */
91 2
    public function getUser($id, array $params = [])
92
    {
93 2
        return $this->getItem($id, 'directus_users', $params);
94
    }
95
96
    /**
97
     * @inheritdoc
98
     */
99 2
    public function getGroups()
100
    {
101 2
        return $this->performRequest('GET', static::GROUP_LIST_ENDPOINT);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('G...::GROUP_LIST_ENDPOINT); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 101 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getGroups of type Directus\SDK\Response\EntryCollection.
Loading history...
102
    }
103
104
    /**
105
     * @inheritdoc
106
     */
107 2
    public function getGroup($groupID)
108
    {
109 2
        $path = $this->buildPath(static::GROUP_INFORMATION_ENDPOINT, $groupID);
110
111 2
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 111 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getGroup of type Directus\SDK\Response\Entry.
Loading history...
112
    }
113
114
    /**
115
     * @inheritdoc
116
     */
117 2
    public function getGroupPrivileges($groupID)
118
    {
119 2
        $path = $this->buildPath(static::GROUP_PRIVILEGES_ENDPOINT, $groupID);
120
121 2
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 121 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getGroupPrivileges of type Directus\SDK\Response\EntryCollection.
Loading history...
122
    }
123
124
    /**
125
     * @inheritdoc
126
     */
127 2
    public function getFiles()
128
    {
129 2
        return $this->performRequest('GET', static::FILE_LIST_ENDPOINT);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('G...c::FILE_LIST_ENDPOINT); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 129 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getFiles of type Directus\SDK\Response\EntryCollection.
Loading history...
130
    }
131
132
    /**
133
     * @inheritdoc
134
     */
135 2
    public function getFile($fileID)
136
    {
137 2
        $path = $this->buildPath(static::FILE_INFORMATION_ENDPOINT, $fileID);
138
139 2
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 139 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getFile of type Directus\SDK\Response\Entry.
Loading history...
140
    }
141
142
    /**
143
     * @inheritdoc
144
     */
145 2
    public function getSettings()
146
    {
147 2
        return $this->performRequest('GET', static::SETTING_LIST_ENDPOINT);
148
    }
149
150
    /**
151
     * @inheritdoc
152
     */
153 2
    public function getSettingsByCollection($collectionName)
154
    {
155 2
        $path = $this->buildPath(static::SETTING_COLLECTION_ENDPOINT, $collectionName);
156
157 2
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 157 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInt...getSettingsByCollection of type Directus\SDK\Response\EntryCollection.
Loading history...
158
    }
159
160
    /**
161
     * @inheritdoc
162
     */
163
    public function getMessages($userId)
164
    {
165
        $path = $this->buildPath(static::MESSAGES_USER_ENDPOINT, $userId);
166
167
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\Entry to the return on line 167 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getMessages of type Directus\SDK\Response\EntryCollection.
Loading history...
168
    }
169
170
    /**
171
     * @inheritdoc
172
     */
173 View Code Duplication
    public function createItem($tableName, array $data)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
174
    {
175
        $path = $this->buildPath(static::TABLE_ENTRY_CREATE_ENDPOINT, $tableName);
176
        $data = $this->processData($tableName, $data);
177
178
        return $this->performRequest('POST', $path, ['body' => $data]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 178 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createItem of type Directus\SDK\Response\Entry.
Loading history...
179
    }
180
181
    /**
182
     * @inheritdoc
183
     */
184 View Code Duplication
    public function updateItem($tableName, $id, array $data)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
185
    {
186
        $path = $this->buildPath(static::TABLE_ENTRY_UPDATE_ENDPOINT, [$tableName, $id]);
187
        $data = $this->processData($tableName, $data);
188
189
        return $this->performRequest('PUT', $path, ['body' => $data]);
190
    }
191
192
    /**
193
     * @inheritdoc
194
     */
195
    public function deleteItem($tableName, $id)
196
    {
197
        $path = $this->buildPath(static::TABLE_ENTRY_DELETE_ENDPOINT, [$tableName, $id]);
198
199
        return $this->performRequest('DELETE', $path);
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $this->performRequest('DELETE', $path); (Directus\SDK\Response\En...ctus\SDK\Response\Entry) is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteItem of type integer.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
200
    }
201
202
    /**
203
     * @inheritdoc
204
     */
205
    public function createUser(array $data)
206
    {
207
        return $this->createItem('directus_users', $data);
208
    }
209
210
    /**
211
     * @inheritdoc
212
     */
213
    public function updateUser($id, array $data)
214
    {
215
        return $this->updateItem('directus_users', $id, $data);
216
    }
217
218
    /**
219
     * @inheritdoc
220
     */
221
    public function deleteUser($ids)
222
    {
223
        return $this->deleteItem('directus_users', $ids);
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $this->deleteItem('directus_users', $ids); (Directus\SDK\Response\En...ctus\SDK\Response\Entry) is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteUser of type integer.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
224
    }
225
226
    /**
227
     * @inheritdoc
228
     */
229
    public function createFile(File $file)
230
    {
231
        $data = $this->processFile($file);
232
233
        return $this->performRequest('POST', static::FILE_CREATE_ENDPOINT, ['body' => $data]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 233 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createFile of type Directus\SDK\Response\Entry.
Loading history...
234
    }
235
236
    /**
237
     * @inheritdoc
238
     */
239
    public function updateFile($id, $data)
240
    {
241
        if ($data instanceof File) {
242
            $data = $data->toArray();
243
        }
244
245
        $data['id'] = $id;
246
        $path = $this->buildPath(static::FILE_UPDATE_ENDPOINT, $id);
247
        $data = $this->processData('directus_files', $data);
248
249
        return $this->performRequest('POST', $path, ['body' => $data]);
250
    }
251
252
    /**
253
     * @inheritdoc
254
     */
255
    public function deleteFile($id)
256
    {
257
        return $this->deleteItem('directus_files', $id);
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $this->deleteItem('directus_files', $id); (Directus\SDK\Response\En...ctus\SDK\Response\Entry) is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteFile of type integer.

If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design.

Let’s take a look at an example:

class Author {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

abstract class Post {
    public function getAuthor() {
        return 'Johannes';
    }
}

class BlogPost extends Post {
    public function getAuthor() {
        return new Author('Johannes');
    }
}

class ForumPost extends Post { /* ... */ }

function my_function(Post $post) {
    echo strtoupper($post->getAuthor());
}

Our function my_function expects a Post object, and outputs the author of the post. The base class Post returns a simple string and outputting a simple string will work just fine. However, the child class BlogPost which is a sub-type of Post instead decided to return an object, and is therefore violating the SOLID principles. If a BlogPost were passed to my_function, PHP would not complain, but ultimately fail when executing the strtoupper call in its body.

Loading history...
258
    }
259
260
    public function createPreferences($data)
261
    {
262
        $this->requiredAttributes(['title', 'table_name'], $data);
263
264
        $tableName = ArrayUtils::get($data, 'table_name');
265
        $path = $this->buildPath(static::TABLE_PREFERENCES_ENDPOINT, $tableName);
266
        $data = $this->processData($tableName, $data);
267
268
        return $this->performRequest('POST', $path, ['body' => $data]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 268 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createPreferences of type Directus\SDK\Response\Entry.
Loading history...
269
    }
270
271
    /**
272
     * @inheritdoc
273
     */
274
    public function createBookmark($data)
275
    {
276
        $preferences = $this->createPreferences(ArrayUtils::pick($data, [
277
            'title', 'table_name', 'sort', 'status', 'search_string', 'sort_order', 'columns_visible'
278
        ]));
279
280
        $title = $preferences->title;
0 ignored issues
show
Documentation introduced by
The property title does not exist on object<Directus\SDK\Response\Entry>. Since you implemented __set, maybe consider adding a @property annotation.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
281
        $tableName = $preferences->table_name;
0 ignored issues
show
Documentation introduced by
The property table_name does not exist on object<Directus\SDK\Response\Entry>. Since you implemented __set, maybe consider adding a @property annotation.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
282
        $bookmarkData = [
283
            'section' => 'search',
284
            'title' => $title,
285
            'url' => 'tables/' . $tableName . '/pref/' . $title
286
        ];
287
288
        $path = $this->buildPath(static::BOOKMARKS_CREATE_ENDPOINT);
289
        $bookmarkData = $this->processData($tableName, $bookmarkData);
290
291
        return $this->performRequest('POST', $path, ['body' => $bookmarkData]);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...dy' => $bookmarkData)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 291 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createBookmark of type Directus\SDK\Response\Entry.
Loading history...
292
    }
293
294
    /**
295
     * @inheritdoc
296
     */
297
    public function getBookmark($id)
298
    {
299
        $path = $this->buildPath(static::BOOKMARKS_READ_ENDPOINT, $id);
0 ignored issues
show
Documentation introduced by
$id is of type integer, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
300
301
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 301 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getBookmark of type Directus\SDK\Response\Entry.
Loading history...
302
    }
303
304
    /**
305
     * @inheritdoc
306
     */
307
    public function getBookmarks($userId = null)
308
    {
309
        if ($userId !== null) {
310
            $path = $this->buildPath(static::BOOKMARKS_USER_ENDPOINT, $userId);
0 ignored issues
show
Documentation introduced by
$userId is of type integer, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
311
        } else {
312
            $path = $this->buildPath(static::BOOKMARKS_ALL_ENDPOINT);
313
        }
314
315
        return $this->performRequest('GET', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('GET', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 315 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getBookmarks of type Directus\SDK\Response\Entry.
Loading history...
316
    }
317
318
    /**
319
     * @inheritdoc
320
     */
321
    public function createColumn($data)
322
    {
323
        $data = $this->parseColumnData($data);
324
325
        return $this->performRequest('POST', $this->buildPath(static::COLUMN_CREATE_ENDPOINT, $data['table_name']), [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 325 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createColumn of type Directus\SDK\Response\Entry.
Loading history...
326
            'body' => $data
327
        ]);
328
    }
329
330
    /**
331
     * @inheritdoc
332
     */
333
    public function createGroup(array $data)
334
    {
335
        return $this->performRequest('POST', static::GROUP_CREATE_ENDPOINT, [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 335 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createGroup of type Directus\SDK\Response\Entry.
Loading history...
336
            'body' => $data
337
        ]);
338
    }
339
340
    /**
341
     * @inheritdoc
342
     */
343
    public function createMessage(array $data)
344
    {
345
        $this->requiredAttributes(['from', 'message', 'subject'], $data);
346
        $this->requiredOneAttribute(['to', 'toGroup'], $data);
347
348
        $data['recipients'] = $this->getMessagesTo($data);
349
        ArrayUtils::remove($data, ['to', 'toGroup']);
350
351
        return $this->performRequest('POST', static::MESSAGES_CREATE_ENDPOINT, [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 351 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createMessage of type Directus\SDK\Response\Entry.
Loading history...
352
            'body' => $data
353
        ]);
354
    }
355
356
    /**
357
     * @inheritdoc
358
     */
359
    public function sendMessage(array $data)
360
    {
361
        return $this->createMessage($data);
362
    }
363
364
    /**
365
     * @inheritdoc
366
     */
367
    public function createPrivileges(array $data)
368
    {
369
        $this->requiredAttributes(['group_id', 'table_name'], $data);
370
371
        return $this->performRequest('POST', static::GROUP_PRIVILEGES_CREATE_ENDPOINT, [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 371 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createPrivileges of type Directus\SDK\Response\Entry.
Loading history...
372
            'body' => $data
373
        ]);
374
    }
375
376
    public function createTable($name, array $params = [])
377
    {
378
        $data = [
379
            'addTable' => true,
380
            'table_name' => $name
381
        ];
382
383
        return $this->performRequest('POST', static::TABLE_CREATE_ENDPOINT, [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 383 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::createTable of type Directus\SDK\Response\Entry.
Loading history...
384
            'body' => $data
385
        ]);
386
    }
387
388
    /**
389
     * @inheritdoc
390
     */
391
    public function createColumnUIOptions(array $data)
392
    {
393
        $this->requiredAttributes(['table', 'column', 'ui', 'options'], $data);
394
395
        $path = $this->buildPath(static::COLUMN_OPTIONS_CREATE_ENDPOINT, [
396
            $data['table'],
397
            $data['column'],
398
            $data['ui']
399
        ]);
400
401
        $data = ArrayUtils::get($data, 'options');
402
403
        return $this->performRequest('POST', $path, [
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...rray('body' => $data)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 403 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInt...::createColumnUIOptions of type Directus\SDK\Response\Entry.
Loading history...
404
            'body' => $data
405
        ]);
406
    }
407
408
    /**
409
     * @inheritdoc
410
     */
411
    public function getPreferences($table, $user = null)
412
    {
413
        return $this->performRequest('POST', $this->buildPath(static::TABLE_PREFERENCES_ENDPOINT, $table));
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('P...CES_ENDPOINT, $table)); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 413 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::getPreferences of type Directus\SDK\Response\Entry.
Loading history...
414
    }
415
416
    /**
417
     * @inheritdoc
418
     */
419
    public function deleteBookmark($id)
420
    {
421
        return $this->deleteItem('directus_bookmarks', $id);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->deleteItem('directus_bookmarks', $id); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 421 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteBookmark of type Directus\SDK\Response\Entry.
Loading history...
422
    }
423
424
    /**
425
     * @inheritdoc
426
     */
427
    public function deleteColumn($name, $table)
428
    {
429
        $path = $this->buildPath(static::COLUMN_DELETE_ENDPOINT, [$name, $table]);
430
431
        return $this->performRequest('DELETE', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('DELETE', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 431 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteColumn of type Directus\SDK\Response\Entry.
Loading history...
432
    }
433
434
    /**
435
     * @inheritdoc
436
     */
437
    public function deleteGroup($id)
438
    {
439
        return $this->deleteItem('directus_groups', $id);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->deleteItem('directus_groups', $id); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 439 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteGroup of type Directus\SDK\Response\Entry.
Loading history...
440
    }
441
442
    /**
443
     * @inheritdoc
444
     */
445
    public function deleteTable($name)
446
    {
447
        $path = $this->buildPath(static::TABLE_DELETE_ENDPOINT, $name);
448
449
        return $this->performRequest('DELETE', $path);
0 ignored issues
show
Bug Compatibility introduced by
The expression $this->performRequest('DELETE', $path); of type Directus\SDK\Response\En...ctus\SDK\Response\Entry adds the type Directus\SDK\Response\EntryCollection to the return on line 449 which is incompatible with the return type declared by the interface Directus\SDK\RequestsInterface::deleteTable of type Directus\SDK\Response\Entry.
Loading history...
450
    }
451
}
452