Completed
Push — master ( cf0d01...a2ef41 )
by Michael
23s
created

XoopsMembershipHandler::create()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 5
nc 2
nop 1
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 27 and the first side effect is on line 18.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/**
3
 * XOOPS Kernel Class
4
 *
5
 * You may not change or alter any portion of this comment or credits
6
 * of supporting developers from this source code or any supporting source code
7
 * which is considered copyrighted (c) material of the original comment or credit authors.
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
13
 * @license             GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
14
 * @package             kernel
15
 * @since               2.0.0
16
 * @author              Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/, http://jp.xoops.org/
17
 */
18
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
19
20
/**
21
 * a group of users
22
 *
23
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
24
 * @author              Kazumi Ono <[email protected]>
25
 * @package             kernel
26
 */
27 View Code Duplication
class XoopsGroup extends XoopsObject
0 ignored issues
show
Duplication introduced by
This class 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...
28
{
29
    /**
30
     * constructor
31
     */
32
    public function __construct()
33
    {
34
        parent::__construct();
35
        $this->initVar('groupid', XOBJ_DTYPE_INT, null, false);
36
        $this->initVar('name', XOBJ_DTYPE_TXTBOX, null, true, 100);
37
        $this->initVar('description', XOBJ_DTYPE_TXTAREA, null, false);
38
        $this->initVar('group_type', XOBJ_DTYPE_OTHER, null, false);
39
    }
40
41
    /**
42
     * Returns Class Base Variable groupid
43
     * @param  string $format
44
     * @return mixed
45
     */
46
    public function id($format = 'N')
47
    {
48
        return $this->getVar('groupid', $format);
49
    }
50
51
    /**
52
     * Returns Class Base Variable groupid
53
     * @param  string $format
54
     * @return mixed
55
     */
56
    public function groupid($format = '')
57
    {
58
        return $this->getVar('groupid', $format);
59
    }
60
61
    /**
62
     * Returns Class Base Variable name
63
     * @param  string $format
64
     * @return mixed
65
     */
66
    public function name($format = '')
67
    {
68
        return $this->getVar('name', $format);
69
    }
70
71
    /**
72
     * Returns Class Base Variable description
73
     * @param  string $format
74
     * @return mixed
75
     */
76
    public function description($format = '')
77
    {
78
        return $this->getVar('description', $format);
79
    }
80
81
    /**
82
     * Returns Class Base Variable group_type
83
     * @param  string $format
84
     * @return mixed
85
     */
86
    public function group_type($format = '')
87
    {
88
        return $this->getVar('group_type', $format);
89
    }
90
}
91
92
/**
93
 * XOOPS group handler class.
94
 * This class is responsible for providing data access mechanisms to the data source
95
 * of XOOPS group class objects.
96
 *
97
 * @author              Kazumi Ono <[email protected]>
98
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
99
 * @package             kernel
100
 * @subpackage          member
101
 */
102
class XoopsGroupHandler extends XoopsObjectHandler
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
103
{
104
    /**
105
     * This should be here, since this really should be a XoopsPersistableObjectHandler
106
     * Here, we fake it for future compatibility
107
     *
108
     * @var string table name
109
     */
110
    public $table;
111
112
    public function __construct(XoopsDatabase $db)
113
    {
114
        parent::__construct($db);
115
        $this->table = $this->db->prefix('groups');
116
    }
117
118
    /**
119
     * create a new {@link XoopsGroup} object
120
     *
121
     * @param  bool $isNew mark the new object as "new"?
122
     * @return XoopsGroup XoopsGroup reference to the new object
123
     *
124
     */
125
    public function create($isNew = true)
126
    {
127
        $group = new XoopsGroup();
128
        if ($isNew) {
129
            $group->setNew();
130
        }
131
132
        return $group;
133
    }
134
135
    /**
136
     * retrieve a specific group
137
     *
138
     * @param  int $id ID of the group to get
139
     * @return XoopsGroup XoopsGroup reference to the group object, FALSE if failed
140
     */
141 View Code Duplication
    public function get($id)
142
    {
143
        $id    = (int)$id;
144
        $group = false;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The expression false; of type false adds false to the return on line 157 which is incompatible with the return type documented by XoopsGroupHandler::get of type XoopsGroup. It seems like you forgot to handle an error condition.
Loading history...
145
        if ($id > 0) {
146
            $sql = 'SELECT * FROM ' . $this->db->prefix('groups') . ' WHERE groupid=' . $id;
147
            if (!$result = $this->db->query($sql)) {
148
                return $group;
0 ignored issues
show
Bug Best Practice introduced by
The return type of return $group; (false) is incompatible with the return type documented by XoopsGroupHandler::get of type XoopsGroup.

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...
149
            }
150
            $numrows = $this->db->getRowsNum($result);
151
            if ($numrows == 1) {
152
                $group = new XoopsGroup();
153
                $group->assignVars($this->db->fetchArray($result));
154
            }
155
        }
156
157
        return $group;
158
    }
159
160
    /**
161
     * insert a group into the database
162
     *
163
     * @param XoopsObject|XoopsGroup $group a group object
164
     *
165
     * @return bool true on success, otherwise false
166
     */
167 View Code Duplication
    public function insert(XoopsObject $group)
168
    {
169
        $className = 'XoopsGroup';
170
        if (!($group instanceof $className)) {
171
            return false;
172
        }
173
        if (!$group->isDirty()) {
174
            return true;
175
        }
176
        if (!$group->cleanVars()) {
177
            return false;
178
        }
179
        foreach ($group->cleanVars as $k => $v) {
180
            ${$k} = $v;
181
        }
182
        if ($group->isNew()) {
183
            $groupid = $this->db->genId('group_groupid_seq');
184
            $sql     = sprintf('INSERT INTO %s (groupid, name, description, group_type) VALUES (%u, %s, %s, %s)', $this->db->prefix('groups'), $groupid, $this->db->quoteString($name), $this->db->quoteString($description), $this->db->quoteString($group_type));
0 ignored issues
show
Bug introduced by
The variable $name does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $description does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $group_type does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
185
        } else {
186
            $sql = sprintf('UPDATE %s SET name = %s, description = %s, group_type = %s WHERE groupid = %u', $this->db->prefix('groups'), $this->db->quoteString($name), $this->db->quoteString($description), $this->db->quoteString($group_type), $groupid);
0 ignored issues
show
Bug introduced by
The variable $groupid seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
187
        }
188
        if (!$result = $this->db->query($sql)) {
189
            return false;
190
        }
191
        if (empty($groupid)) {
192
            $groupid = $this->db->getInsertId();
193
        }
194
        $group->assignVar('groupid', $groupid);
195
196
        return true;
197
    }
198
199
    /**
200
     * remove a group from the database
201
     *
202
     * @param XoopsObject|XoopsGroup $group a group object
203
     *
204
     * @return bool true on success, otherwise false
205
     */
206
    public function delete(XoopsObject $group)
207
    {
208
        $className = 'XoopsGroup';
209
        if (!($group instanceof $className)) {
210
            return false;
211
        }
212
        $sql = sprintf('DELETE FROM %s WHERE groupid = %u', $this->db->prefix('groups'), $group->getVar('groupid'));
213
        if (!$result = $this->db->query($sql)) {
214
            return false;
215
        }
216
217
        return true;
218
    }
219
220
    /**
221
     * retrieve groups from the database
222
     *
223
     * @param  CriteriaElement $criteria  {@link CriteriaElement} with conditions for the groups
224
     * @param  bool            $id_as_key should the groups' IDs be used as keys for the associative array?
225
     * @return mixed           Array of groups
226
     */
227 View Code Duplication
    public function getObjects(CriteriaElement $criteria = null, $id_as_key = false)
228
    {
229
        $ret   = array();
230
        $limit = $start = 0;
231
        $sql   = 'SELECT * FROM ' . $this->db->prefix('groups');
232
        if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
233
            $sql .= ' ' . $criteria->renderWhere();
0 ignored issues
show
Bug introduced by
The method renderWhere() does not exist on CriteriaElement. Did you maybe mean render()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
234
            $limit = $criteria->getLimit();
235
            $start = $criteria->getStart();
236
        }
237
        $result = $this->db->query($sql, $limit, $start);
238
        if (!$result) {
239
            return $ret;
240
        }
241
        while ($myrow = $this->db->fetchArray($result)) {
242
            $group = new XoopsGroup();
243
            $group->assignVars($myrow);
244
            if (!$id_as_key) {
245
                $ret[] =& $group;
246
            } else {
247
                $ret[$myrow['groupid']] = &$group;
248
            }
249
            unset($group);
250
        }
251
252
        return $ret;
253
    }
254
}
255
256
/**
257
 * membership of a user in a group
258
 *
259
 * @author              Kazumi Ono <[email protected]>
260
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
261
 * @package             kernel
262
 */
263
class XoopsMembership extends XoopsObject
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
264
{
265
    /**
266
     * constructor
267
     */
268
    public function __construct()
269
    {
270
        parent::__construct();
271
        $this->initVar('linkid', XOBJ_DTYPE_INT, null, false);
272
        $this->initVar('groupid', XOBJ_DTYPE_INT, null, false);
273
        $this->initVar('uid', XOBJ_DTYPE_INT, null, false);
274
    }
275
}
276
277
/**
278
 * XOOPS membership handler class. (Singleton)
279
 *
280
 * This class is responsible for providing data access mechanisms to the data source
281
 * of XOOPS group membership class objects.
282
 *
283
 * @author              Kazumi Ono <[email protected]>
284
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
285
 * @package             kernel
286
 */
287
class XoopsMembershipHandler extends XoopsObjectHandler
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class should be in its own file to aid autoloaders.

Having each class in a dedicated file usually plays nice with PSR autoloaders and is therefore a well established practice. If you use other autoloaders, you might not want to follow this rule.

Loading history...
288
{
289
    /**
290
     * This should be here, since this really should be a XoopsPersistableObjectHandler
291
     * Here, we fake it for future compatibility
292
     *
293
     * @var string table name
294
     */
295
    public $table;
296
297
    public function __construct(XoopsDatabase $db)
298
    {
299
        parent::__construct($db);
300
        $this->table = $this->db->prefix('groups_users_link');
301
    }
302
303
    /**
304
     * create a new membership
305
     *
306
     * @param  bool $isNew should the new object be set to "new"?
307
     * @return XoopsMembership XoopsMembership
308
     */
309
    public function create($isNew = true)
310
    {
311
        $mship = new XoopsMembership();
312
        if ($isNew) {
313
            $mship->setNew();
314
        }
315
316
        return $mship;
317
    }
318
319
    /**
320
     * retrieve a membership
321
     *
322
     * @param  int $id ID of the membership to get
323
     * @return mixed reference to the object if successful, else FALSE
324
     */
325 View Code Duplication
    public function get($id)
326
    {
327
        $id    = (int)$id;
328
        $mship = false;
329
        if ($id > 0) {
330
            $sql = 'SELECT * FROM ' . $this->db->prefix('groups_users_link') . ' WHERE linkid=' . $id;
331
            if (!$result = $this->db->query($sql)) {
332
                return $mship;
333
            }
334
            $numrows = $this->db->getRowsNum($result);
335
            if ($numrows == 1) {
336
                $mship = new XoopsMembership();
337
                $mship->assignVars($this->db->fetchArray($result));
338
            }
339
        }
340
341
        return $mship;
342
    }
343
344
    /**
345
     * inserts a membership in the database
346
     *
347
     * @param  XoopsObject|XoopsMembership $mship a XoopsMembership object
348
     *
349
     * @return bool true on success, otherwise false
350
     */
351
    public function insert(XoopsObject $mship)
352
    {
353
        $className = 'XoopsMembership';
354
        if (!($mship instanceof $className)) {
355
            return false;
356
        }
357
        if (!$mship->isDirty()) {
358
            return true;
359
        }
360
        if (!$mship->cleanVars()) {
361
            return false;
362
        }
363
        foreach ($mship->cleanVars as $k => $v) {
364
            ${$k} = $v;
365
        }
366
        if ($mship->isNew()) {
367
            $linkid = $this->db->genId('groups_users_link_linkid_seq');
368
            $sql    = sprintf('INSERT INTO %s (linkid, groupid, uid) VALUES (%u, %u, %u)', $this->db->prefix('groups_users_link'), $linkid, $groupid, $uid);
0 ignored issues
show
Bug introduced by
The variable $groupid does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
Bug introduced by
The variable $uid does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
369
        } else {
370
            $sql = sprintf('UPDATE %s SET groupid = %u, uid = %u WHERE linkid = %u', $this->db->prefix('groups_users_link'), $groupid, $uid, $linkid);
0 ignored issues
show
Bug introduced by
The variable $linkid seems only to be defined at a later point. Did you maybe move this code here without moving the variable definition?

This error can happen if you refactor code and forget to move the variable initialization.

Let’s take a look at a simple example:

function someFunction() {
    $x = 5;
    echo $x;
}

The above code is perfectly fine. Now imagine that we re-order the statements:

function someFunction() {
    echo $x;
    $x = 5;
}

In that case, $x would be read before it is initialized. This was a very basic example, however the principle is the same for the found issue.

Loading history...
371
        }
372
        if (!$result = $this->db->query($sql)) {
373
            return false;
374
        }
375
        if (empty($linkid)) {
376
            $linkid = $this->db->getInsertId();
377
        }
378
        $mship->assignVar('linkid', $linkid);
379
380
        return true;
381
    }
382
383
    /**
384
     * delete a membership from the database
385
     *
386
     * @param  XoopsObject|XoopsMembership $mship a XoopsMembership object
387
     *
388
     * @return bool true on success, otherwise false
389
     */
390
    public function delete(XoopsObject $mship)
391
    {
392
        $className = 'XoopsMembership';
393
        if (!($mship instanceof $className)) {
394
            return false;
395
        }
396
397
        $sql = sprintf('DELETE FROM %s WHERE linkid = %u', $this->db->prefix('groups_users_link'), $groupm->getVar('linkid'));
0 ignored issues
show
Bug introduced by
The variable $groupm does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
398
        if (!$result = $this->db->query($sql)) {
399
            return false;
400
        }
401
402
        return true;
403
    }
404
405
    /**
406
     * retrieve memberships from the database
407
     *
408
     * @param  CriteriaElement $criteria  {@link CriteriaElement} conditions to meet
409
     * @param  bool            $id_as_key should the ID be used as the array's key?
410
     * @return array           array of references
411
     */
412 View Code Duplication
    public function getObjects(CriteriaElement $criteria = null, $id_as_key = false)
413
    {
414
        $ret   = array();
415
        $limit = $start = 0;
416
        $sql   = 'SELECT * FROM ' . $this->db->prefix('groups_users_link');
417
        if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
418
            $sql .= ' ' . $criteria->renderWhere();
0 ignored issues
show
Bug introduced by
The method renderWhere() does not exist on CriteriaElement. Did you maybe mean render()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
419
            $limit = $criteria->getLimit();
420
            $start = $criteria->getStart();
421
        }
422
        $result = $this->db->query($sql, $limit, $start);
423
        if (!$result) {
424
            return $ret;
425
        }
426
        while ($myrow = $this->db->fetchArray($result)) {
427
            $mship = new XoopsMembership();
428
            $mship->assignVars($myrow);
429
            if (!$id_as_key) {
430
                $ret[] =& $mship;
431
            } else {
432
                $ret[$myrow['linkid']] = &$mship;
433
            }
434
            unset($mship);
435
        }
436
437
        return $ret;
438
    }
439
440
    /**
441
     * count how many memberships meet the conditions
442
     *
443
     * @param  CriteriaElement $criteria {@link CriteriaElement} conditions to meet
444
     * @return int
445
     */
446 View Code Duplication
    public function getCount(CriteriaElement $criteria = null)
447
    {
448
        $sql = 'SELECT COUNT(*) FROM ' . $this->db->prefix('groups_users_link');
449
        if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
450
            $sql .= ' ' . $criteria->renderWhere();
0 ignored issues
show
Bug introduced by
The method renderWhere() does not exist on CriteriaElement. Did you maybe mean render()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
451
        }
452
        $result = $this->db->query($sql);
453
        if (!$result) {
454
            return 0;
455
        }
456
        list($count) = $this->db->fetchRow($result);
457
458
        return $count;
459
    }
460
461
    /**
462
     * delete all memberships meeting the conditions
463
     *
464
     * @param  CriteriaElement $criteria {@link CriteriaElement} with conditions to meet
465
     * @return bool
466
     */
467 View Code Duplication
    public function deleteAll(CriteriaElement $criteria = null)
468
    {
469
        $sql = 'DELETE FROM ' . $this->db->prefix('groups_users_link');
470
        if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
471
            $sql .= ' ' . $criteria->renderWhere();
0 ignored issues
show
Bug introduced by
The method renderWhere() does not exist on CriteriaElement. Did you maybe mean render()?

This check marks calls to methods that do not seem to exist on an object.

This is most likely the result of a method being renamed without all references to it being renamed likewise.

Loading history...
472
        }
473
        if (!$result = $this->db->query($sql)) {
474
            return false;
475
        }
476
477
        return true;
478
    }
479
480
    /**
481
     * retrieve groups for a user
482
     *
483
     * @param int $uid ID of the user
484
     *
485
     * @internal param bool $asobject should the groups be returned as {@link XoopsGroup}
486
     *           objects? FALSE returns associative array.
487
     * @return array array of groups the user belongs to
488
     */
489 View Code Duplication
    public function getGroupsByUser($uid)
490
    {
491
        $ret    = array();
492
        $sql    = 'SELECT groupid FROM ' . $this->db->prefix('groups_users_link') . ' WHERE uid=' . (int)$uid;
493
        $result = $this->db->query($sql);
494
        if (!$result) {
495
            return $ret;
496
        }
497
        while ($myrow = $this->db->fetchArray($result)) {
498
            $ret[] = $myrow['groupid'];
499
        }
500
501
        return $ret;
502
    }
503
504
    /**
505
     * retrieve users belonging to a group
506
     *
507
     * @param int $groupid    ID of the group
508
     * @param int $limit      number of entries to return
509
     * @param int $start      offset of first entry to return
510
     * @internal param bool $asobject return users as {@link XoopsUser} objects? objects?
511
     *                        FALSE will return arrays
512
     * @return array array of users belonging to the group
513
     */
514 View Code Duplication
    public function getUsersByGroup($groupid, $limit = 0, $start = 0)
515
    {
516
        $ret    = array();
517
        $sql    = 'SELECT uid FROM ' . $this->db->prefix('groups_users_link') . ' WHERE groupid=' . (int)$groupid;
518
        $result = $this->db->query($sql, $limit, $start);
519
        if (!$result) {
520
            return $ret;
521
        }
522
        while ($myrow = $this->db->fetchArray($result)) {
523
            $ret[] = $myrow['uid'];
524
        }
525
526
        return $ret;
527
    }
528
}
529