1: <?php
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: if (!defined('XOOPS_ROOT_PATH')) {
33: exit();
34: }
35:
36: 37: 38: 39: 40: 41: 42:
43: class XoopsGroup extends XoopsObject
44: {
45: 46: 47:
48: function XoopsGroup()
49: {
50: static $initVars;
51: if (isset($initVars)) {
52: $this->vars = $initVars;
53: return;
54: }
55: $this->XoopsObject();
56: $this->initVar('groupid', XOBJ_DTYPE_INT, null, false);
57: $this->initVar('name', XOBJ_DTYPE_TXTBOX, null, true, 100);
58: $this->initVar('description', XOBJ_DTYPE_TXTAREA, null, false);
59: $this->initVar('group_type', XOBJ_DTYPE_OTHER, null, false);
60: $initVars = $this->vars;
61: }
62: }
63:
64:
65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
75: class XoopsGroupHandler extends XoopsObjectHandler
76: {
77:
78: 79: 80: 81: 82: 83: 84:
85: function &create($isNew = true)
86: {
87: $group =new XoopsGroup();
88: if ($isNew) {
89: $group->setNew();
90: }
91:
92: $group->setVar('group_type', 'User');
93:
94: return $group;
95: }
96:
97: 98: 99: 100: 101: 102:
103: function &get($id)
104: {
105: $ret = false;
106: if ((int)$id > 0) {
107: $db = &$this->db;
108: $sql = 'SELECT * FROM '.$db->prefix('groups').' WHERE groupid='.$id;
109: if ($result = $db->query($sql)) {
110: $numrows = $db->getRowsNum($result);
111: if ($numrows == 1) {
112: $group = new XoopsGroup();
113: $group->assignVars($db->fetchArray($result));
114: $ret =& $group;
115: }
116: }
117: }
118: return $ret;
119: }
120:
121: 122: 123: 124: 125: 126:
127: function insert(&$group)
128: {
129: if (strtolower(get_class($group)) != 'xoopsgroup') {
130: return false;
131: }
132: if (!$group->isDirty()) {
133: return true;
134: }
135: if (!$group->cleanVars()) {
136: return false;
137: }
138: foreach ($group->cleanVars as $k => $v) {
139: ${$k} = $v;
140: }
141: $db = &$this->db;
142: if ($group->isNew()) {
143: $groupid = $db->genId('group_groupid_seq');
144: $sql = sprintf('INSERT INTO %s (groupid, name, description, group_type) VALUES (%u, %s, %s, %s)', $db->prefix('groups'), $groupid, $db->quoteString($name), $db->quoteString($description), $db->quoteString($group_type));
145: } else {
146: $sql = sprintf("UPDATE %s SET name = %s, description = %s, group_type = %s WHERE groupid = %u", $db->prefix('groups'), $db->quoteString($name), $db->quoteString($description), $db->quoteString($group_type), $groupid);
147: }
148: if (!$result = $db->query($sql)) return false;
149: if (empty($groupid)) $groupid = $db->getInsertId();
150: $group->assignVar('groupid', $groupid);
151: return true;
152: }
153:
154: 155: 156: 157: 158: 159:
160: function delete(&$group)
161: {
162: if (strtolower(get_class($group)) != 'xoopsgroup') return false;
163: $sql = sprintf('DELETE FROM %s WHERE groupid = %u', $this->db->prefix('groups'), $group->getVar('groupid'));
164: if (!$result = $this->db->query($sql)) {
165: return false;
166: }
167: return true;
168: }
169:
170: 171: 172: 173: 174: 175: 176:
177: function &getObjects($criteria = null, $id_as_key = false)
178: {
179: $ret = array();
180: $limit = $start = 0;
181: $db = &$this->db;
182: $sql = 'SELECT * FROM '.$db->prefix('groups');
183: if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
184: $sql .= ' '.$criteria->renderWhere();
185: $limit = $criteria->getLimit();
186: $start = $criteria->getStart();
187: }
188: $result = $db->query($sql, $limit, $start);
189: if (!$result) {
190: return $ret;
191: }
192: while ($myrow = $db->fetchArray($result)) {
193: $group =new XoopsGroup();
194: $group->assignVars($myrow);
195: if (!$id_as_key) {
196: $ret[] =& $group;
197: } else {
198: $ret[$myrow['groupid']] =& $group;
199: }
200: unset($group);
201: }
202: return $ret;
203: }
204: }
205:
206: 207: 208: 209: 210: 211: 212:
213: class XoopsMembership extends XoopsObject
214: {
215: 216: 217:
218: function XoopsMembership()
219: {
220: $this->XoopsObject();
221: $this->initVar('linkid', XOBJ_DTYPE_INT, null, false);
222: $this->initVar('groupid', XOBJ_DTYPE_INT, null, false);
223: $this->initVar('uid', XOBJ_DTYPE_INT, null, false);
224: }
225: }
226:
227: 228: 229: 230: 231: 232: 233: 234: 235: 236:
237: class XoopsMembershipHandler extends XoopsObjectHandler
238: {
239:
240: 241: 242: 243: 244: 245:
246: function &create($isNew = true)
247: {
248: $mship =new XoopsMembership();
249: if ($isNew) {
250: $mship->setNew();
251: }
252: return $mship;
253: }
254:
255: 256: 257: 258: 259: 260:
261: function &get($id)
262: {
263: $ret = false;
264: if ((int)$id > 0) {
265: $db = &$this->db;
266: $sql = 'SELECT * FROM '.$db->prefix('groups_users_link').' WHERE linkid='.$id;
267: if ($result = $db->query($sql)) {
268: $numrows = $db->getRowsNum($result);
269: if ($numrows == 1) {
270: $mship =new XoopsMembership();
271: $mship->assignVars($db->fetchArray($result));
272: $ret =& $mship;
273: }
274: }
275: }
276: return $ret;
277: }
278:
279: 280: 281: 282: 283: 284:
285: function insert(&$mship)
286: {
287: if (strtolower(get_class($mship)) != 'xoopsmembership') {
288: return false;
289: }
290: if (!$mship->isDirty()) {
291: return true;
292: }
293: if (!$mship->cleanVars()) {
294: return false;
295: }
296: foreach ($mship->cleanVars as $k => $v) {
297: ${$k} = $v;
298: }
299: $db = &$this->db;
300: if ($mship->isNew()) {
301: $linkid = $db->genId('groups_users_link_linkid_seq');
302: $sql = sprintf("INSERT INTO %s (linkid, groupid, uid) VALUES (%u, %u, %u)", $db->prefix('groups_users_link'), $linkid, $groupid, $uid);
303: } else {
304: $sql = sprintf("UPDATE %s SET groupid = %u, uid = %u WHERE linkid = %u", $db->prefix('groups_users_link'), $groupid, $uid, $linkid);
305: }
306: if (!$result = $db->query($sql)) return false;
307: if (empty($linkid)) $linkid = $this->db->getInsertId();
308: $mship->assignVar('linkid', $linkid);
309: return true;
310: }
311:
312: 313: 314: 315: 316: 317:
318: function delete(&$mship)
319: {
320: if (strtolower(get_class($mship)) != 'xoopsmembership') {
321: return false;
322: }
323: $sql = sprintf('DELETE FROM %s WHERE linkid = %u', $this->db->prefix('groups_users_link'), $groupm->getVar('linkid'));
324: if (!$result = $this->db->query($sql)) return false;
325: return true;
326: }
327:
328: 329: 330: 331: 332: 333: 334:
335: function &getObjects($criteria = null, $id_as_key = false)
336: {
337: $ret = array();
338: $limit = $start = 0;
339: $db = &$this->db;
340: $sql = 'SELECT * FROM '.$db->prefix('groups_users_link');
341: if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
342: $sql .= ' '.$criteria->renderWhere();
343: $limit = $criteria->getLimit();
344: $start = $criteria->getStart();
345: }
346: $result = $db->query($sql, $limit, $start);
347: if (!$result) {
348: return $ret;
349: }
350: while ($myrow = $db->fetchArray($result)) {
351: $mship = new XoopsMembership();
352: $mship->assignVars($myrow);
353: if (!$id_as_key) {
354: $ret[] =& $mship;
355: } else {
356: $ret[$myrow['linkid']] =& $mship;
357: }
358: unset($mship);
359: }
360: return $ret;
361: }
362:
363: 364: 365: 366: 367: 368:
369: function getCount($criteria = null)
370: {
371: $db = &$this->db;
372: $sql = 'SELECT COUNT(*) FROM '.$db->prefix('groups_users_link');
373: if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
374: $sql .= ' '.$criteria->renderWhere();
375: }
376: $result = $db->query($sql);
377: if (!$result) {
378: return 0;
379: }
380: list($count) = $db->fetchRow($result);
381: return $count;
382: }
383:
384: 385: 386: 387: 388: 389:
390: function deleteAll($criteria = null)
391: {
392: $sql = 'DELETE FROM '.$this->db->prefix('groups_users_link');
393: if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
394: $sql .= ' '.$criteria->renderWhere();
395: }
396: if (!$result = $this->db->query($sql)) return false;
397: return true;
398: }
399:
400: 401: 402: 403: 404: 405: 406: 407:
408: function &getGroupsByUser($uid)
409: {
410: $ret = array();
411: $db = &$this->db;
412: $sql = 'SELECT groupid FROM '.$db->prefix('groups_users_link').' WHERE uid='.(int)$uid;
413: $result = $db->query($sql);
414: if (!$result) return $ret;
415: while (list($groupid) = $db->fetchRow($result)) {
416: $ret[] = $groupid;
417: }
418: return $ret;
419: }
420:
421: 422: 423: 424: 425: 426: 427: 428: 429: 430:
431: function &getUsersByGroup($groupid, $limit=0, $start=0)
432: {
433: $ret = array();
434: $db = &$this->db;
435: $sql = 'SELECT uid FROM ' . $db->prefix('groups_users_link') . ' WHERE groupid='.(int)$groupid;
436:
437: $result = $db->query($sql, $limit, $start);
438: if (!$result) return $ret;
439: while (list($uid) = $db->fetchRow($result)) {
440: $ret[] = $uid;
441: }
442: return $ret;
443: }
444:
445: 446: 447:
448: function &getUsersByNoGroup($groupid, $limit=0, $start=0)
449: {
450: $ret = array();
451:
452: $groupid = (int)$groupid;
453: $db = &$this->db;
454: $usersTable = $db->prefix('users');
455: $linkTable = $db->prefix('groups_users_link');
456:
457: $sql = "SELECT u.uid FROM ${usersTable} u LEFT JOIN ${linkTable} g ON u.uid=g.uid," .
458: "${usersTable} u2 LEFT JOIN ${linkTable} g2 ON u2.uid=g2.uid AND g2.groupid=${groupid} " .
459: "WHERE (g.groupid != ${groupid} OR g.groupid IS NULL) " .
460: "AND (g2.groupid = ${groupid} OR g2.groupid IS NULL) " .
461: "AND u.uid = u2.uid AND g2.uid IS NULL GROUP BY u.uid";
462:
463: $result = $db->query($sql, $limit, $start);
464: if (!$result) return $ret;
465: while (list($uid) = $db->fetchRow($result)) {
466: $ret[] = $uid;
467: }
468: return $ret;
469: }
470: }
471: ?>
472: