11 public function &
getObjects($criteria =
null, $limit =
null, $start =
null, $id_as_key =
false)
15 $uTable = $this->db->prefix(
'users') .
' as u';
16 $gTable = $this->db->prefix(
'groups_users_link') .
' as g';
18 $sql =
"SELECT DISTINCT u.* FROM {$uTable} LEFT JOIN {$gTable} ON u.uid=g.uid";
21 $where = $this->_makeCriteria4sql($criteria);
24 if ($where &&
'' !== trim((
string)$where)) {
25 $sql .=
' WHERE ' . $where;
29 foreach ($criteria->getSorts() as $sort) {
30 $sorts[] = $sort[
'sort'] .
' ' . $sort[
'order'];
32 if (
'' != $criteria->getSort()) {
33 $sql .=
' ORDER BY ' . implode(
',', $sorts);
36 if (
null === $limit) {
37 $limit = $criteria->getLimit();
40 if (
null === $start) {
41 $start = $criteria->getStart();
44 if (
null === $limit) {
48 if (
null === $start) {
53 $result = $this->db->query($sql, $limit, $start);
59 while ($row = $this->db->fetchArray($result)) {
60 $obj =
new $this->mClass();
61 $obj->assignVars($row);
65 $ret[$obj->get($this->mPrimary)] = &$obj;
74 foreach (array_keys($ret) as $key) {
75 $ret[$key]->_loadGroups();
92 public function &
getUids($criteria =
null, $limit =
null, $start =
null, $id_as_key =
false)
96 $uTable = $this->db->prefix(
'users') .
' as u';
97 $gTable = $this->db->prefix(
'groups_users_link') .
' as g';
99 $sql =
"SELECT DISTINCT u.uid FROM {$uTable} LEFT JOIN {$gTable} ON u.uid=g.uid";
102 $where = $this->_makeCriteria4sql($criteria);
105 $sql .=
' WHERE ' . $where;
109 foreach ($criteria->getSorts() as $sort) {
110 $sorts[] = $sort[
'sort'] .
' ' . $sort[
'order'];
112 if (
'' != $criteria->getSort()) {
113 $sql .=
' ORDER BY ' . implode(
',', $sorts);
116 if (
null === $limit) {
117 $limit = $criteria->getLimit();
120 if (
null === $start) {
121 $start = $criteria->getStart();
124 if (
null === $limit) {
128 if (
null === $start) {
133 $result = $this->db->query($sql, $limit, $start);
139 while ($row = $this->db->fetchArray($result)) {
140 $ret[] = $row[
'uid'];
146 public function getCount($criteria =
null)
150 $uTable = $this->db->prefix(
'users') .
' as u';
151 $gTable = $this->db->prefix(
'groups_users_link') .
' as g';
153 $sql =
"SELECT COUNT(DISTINCT u.uid) c FROM {$uTable} LEFT JOIN {$gTable} ON u.uid=g.uid";
155 $where = $this->_makeCriteria4sql($criteria);
158 $sql .=
' WHERE ' . $where;
165 public function insert(&$user, $force =
false)
167 if (parent::insert($user, $force)) {
170 $user->_loadGroups();
172 $handler = &xoops_getmodulehandler(
'groups_users_link',
'user');
173 $oldLinkArr = &$handler->getObjects(
new Criteria(
'uid', $user->get(
'uid')), $force);
179 foreach (array_keys($oldLinkArr) as $key) {
180 $oldGroupidArr[] = $oldLinkArr[$key]->get(
'groupid');
181 if (!in_array($oldLinkArr[$key]->
get(
'groupid'), $user->Groups)) {
182 $handler->delete($oldLinkArr[$key], $force);
186 foreach ($user->Groups as $gid) {
187 if (!in_array($gid, $oldGroupidArr)) {
188 $link = &$handler->create();
190 $link->set(
'groupid', $gid);
191 $link->set(
'uid', $user->get(
'uid'));
193 $flag &= $handler->insert($link, $force);