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: class ProfileProfile extends XoopsObject
27: {
28: 29: 30:
31: public function __construct($fields)
32: {
33: $this->initVar('profile_id', XOBJ_DTYPE_INT, null, true);
34: $this->init($fields);
35: }
36:
37: 38: 39: 40:
41: public function init($fields)
42: {
43: if (is_array($fields) && count($fields) > 0) {
44: foreach (array_keys($fields) as $key) {
45: $this->initVar($key, $fields[$key]->getVar('field_valuetype'), $fields[$key]->getVar('field_default', 'n'), $fields[$key]->getVar('field_required'), $fields[$key]->getVar('field_maxlength'));
46: }
47: }
48: }
49: }
50:
51: 52: 53: 54:
55: class ProfileProfileHandler extends XoopsPersistableObjectHandler
56: {
57: 58: 59:
60: public $_fHandler;
61:
62: 63: 64: 65:
66: public $_fields = array();
67:
68: 69: 70:
71: public function __construct(XoopsDatabase $db)
72: {
73: parent::__construct($db, 'profile_profile', 'profileprofile', 'profile_id');
74: $this->_fHandler = xoops_getModuleHandler('field', 'profile');
75: }
76:
77: 78: 79: 80: 81: 82: 83:
84: public function create($isNew = true)
85: {
86: $obj = new $this->className($this->loadFields());
87: $obj->handler = $this;
88: if ($isNew === true) {
89: $obj->setNew();
90: }
91:
92: return $obj;
93: }
94:
95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108:
109: public function get($uid = null, $fields = null)
110: {
111: $obj = parent::get($uid, $fields);
112: if (!is_object($obj)) {
113: $obj = $this->create();
114: }
115:
116: return $obj;
117: }
118:
119: 120: 121: 122: 123: 124: 125:
126: public function createField($isNew = true)
127: {
128: $return = $this->_fHandler->create($isNew);
129:
130: return $return;
131: }
132:
133: 134: 135: 136: 137:
138: public function loadFields()
139: {
140: if (count($this->_fields) == 0) {
141: $this->_fields = $this->_fHandler->loadFields();
142: }
143:
144: return $this->_fields;
145: }
146:
147: 148: 149: 150: 151: 152: 153: 154: 155:
156: public function getFields(CriteriaElement $criteria, $id_as_key = true, $as_object = true)
157: {
158: return $this->_fHandler->getObjects($criteria, $id_as_key, $as_object);
159: }
160:
161: 162: 163: 164: 165: 166: 167: 168:
169: public function insertField(ProfileField $field, $force = false)
170: {
171: return $this->_fHandler->insert($field, $force);
172: }
173:
174: 175: 176: 177: 178: 179: 180: 181:
182: public function deleteField(ProfileField $field, $force = false)
183: {
184: return $this->_fHandler->delete($field, $force);
185: }
186:
187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197:
198: public function saveField($vars, $weight = 0)
199: {
200: $field = $this->createField();
201: $field->setVar('field_name', $vars['name']);
202: $field->setVar('field_valuetype', $vars['valuetype']);
203: $field->setVar('field_type', $vars['type']);
204: $field->setVar('field_weight', $weight);
205: if (isset($vars['title'])) {
206: $field->setVar('field_title', $vars['title']);
207: }
208: if (isset($vars['description'])) {
209: $field->setVar('field_description', $vars['description']);
210: }
211: if (isset($vars['required'])) {
212: $field->setVar('field_required', $vars['required']);
213: }
214: if (isset($vars['maxlength'])) {
215: $field->setVar('field_maxlength', $vars['maxlength']);
216: }
217: if (isset($vars['default'])) {
218: $field->setVar('field_default', $vars['default']);
219: }
220: if (isset($vars['notnull'])) {
221: $field->setVar('field_notnull', $vars['notnull']);
222: }
223: if (isset($vars['show'])) {
224: $field->setVar('field_show', $vars['show']);
225: }
226: if (isset($vars['edit'])) {
227: $field->setVar('field_edit', $vars['edit']);
228: }
229: if (isset($vars['config'])) {
230: $field->setVar('field_config', $vars['config']);
231: }
232: if (isset($vars['options'])) {
233: $field->setVar('field_options', $vars['options']);
234: } else {
235: $field->setVar('field_options', array());
236: }
237: if ($this->insertField($field)) {
238: $msg = ' Field <strong>' . $vars['name'] . '</strong> added to the database';
239: } else {
240: $msg = ' <span class="red">ERROR: Could not insert field <strong>' . $vars['name'] . '</strong> into the database. ' . implode(' ', $field->getErrors()) . $this->db->error() . '</span>';
241: }
242: unset($field);
243:
244: return $msg;
245: }
246:
247: 248: 249: 250: 251: 252: 253: 254:
255: public function insert(XoopsObject $obj, $force = false)
256: {
257: if (!($obj instanceof $this->className)) {
258: return false;
259: }
260: $uservars = $this->getUserVars();
261: foreach ($uservars as $var) {
262: unset($obj->vars[$var]);
263: }
264: if (count($obj->vars) == 0) {
265: return true;
266: }
267:
268: return parent::insert($obj, $force);
269: }
270:
271: 272: 273: 274: 275:
276: public function getUserVars()
277: {
278: return $this->_fHandler->getUserVars();
279: }
280:
281: 282: 283: 284: 285: 286: 287: 288: 289:
290: public function search(CriteriaElement $criteria, $searchvars = array(), $groups = null)
291: {
292: $uservars = $this->getUserVars();
293:
294: $searchvars_user = array_intersect($searchvars, $uservars);
295: $searchvars_profile = array_diff($searchvars, $uservars);
296: $sv = array('u.uid, u.uname, u.email, u.user_viewemail');
297: if (!empty($searchvars_user)) {
298: $sv[0] .= ',u.' . implode(', u.', $searchvars_user);
299: }
300: if (!empty($searchvars_profile)) {
301: $sv[] = 'p.' . implode(', p.', $searchvars_profile);
302: }
303:
304: $sql_select = 'SELECT ' . (empty($searchvars) ? 'u.*, p.*' : implode(', ', $sv));
305: $sql_from = ' FROM ' . $this->db->prefix('users') . ' AS u LEFT JOIN ' . $this->table . ' AS p ON u.uid=p.profile_id' . (empty($groups) ? '' : ' LEFT JOIN ' . $this->db->prefix('groups_users_link') . ' AS g ON u.uid=g.uid');
306: $sql_clause = ' WHERE 1=1';
307: $sql_order = '';
308:
309: $limit = $start = 0;
310: if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) {
311: $sql_clause .= ' AND ' . $criteria->render();
312: if ($criteria->getSort() !== '') {
313: $sql_order = ' ORDER BY ' . $criteria->getSort() . ' ' . $criteria->getOrder();
314: }
315: $limit = $criteria->getLimit();
316: $start = $criteria->getStart();
317: }
318:
319: if (!empty($groups)) {
320: $sql_clause .= ' AND g.groupid IN (' . implode(', ', $groups) . ')';
321: }
322:
323: $sql_users = $sql_select . $sql_from . $sql_clause . $sql_order;
324: $result = $this->db->query($sql_users, $limit, $start);
325:
326: if (!$result) {
327: return array(array(), array(), 0);
328: }
329: $user_handler = xoops_getHandler('user');
330: $uservars = $this->getUserVars();
331: $users = array();
332: $profiles = array();
333: while ($myrow = $this->db->fetchArray($result)) {
334: $profile = $this->create(false);
335: $user = $user_handler->create(false);
336:
337: foreach ($myrow as $name => $value) {
338: if (in_array($name, $uservars)) {
339: $user->assignVar($name, $value);
340: } else {
341: $profile->assignVar($name, $value);
342: }
343: }
344: $profiles[$myrow['uid']] = $profile;
345: $users[$myrow['uid']] = $user;
346: }
347:
348: $count = count($users);
349: if ((!empty($limit) && $count >= $limit) || !empty($start)) {
350: $sql_count = 'SELECT COUNT(*)' . $sql_from . $sql_clause;
351: $result = $this->db->query($sql_count);
352: list($count) = $this->db->fetchRow($result);
353: }
354:
355: return array($users, $profiles, (int)$count);
356: }
357: }
358: