1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
21: defined('XOOPS_ROOT_PATH') || exit('Restricted access');
22:
23: xoops_load('XoopsFormElementTray');
24: xoops_load('XoopsFormSelect');
25:
26: 27: 28:
29: class XoopsFormSelectUser extends XoopsFormElementTray
30: {
31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
44: public function __construct($caption, $name, $includeAnonymous = false, $value = null, $size = 1, $multiple = false)
45: {
46: 47: 48: 49: 50: 51: 52:
53: static $queryCache = false;
54:
55: 56: 57:
58: $limit = 200;
59:
60: 61: 62:
63: $cachettl = '+5 minutes';
64:
65: 66: 67:
68: $cachekey = 'formselectuser';
69:
70: $select_element = new XoopsFormSelect('', $name, $value, $size, $multiple);
71: if ($includeAnonymous) {
72: $select_element->addOption(0, $GLOBALS['xoopsConfig']['anonymous']);
73: }
74:
75: $member_handler = xoops_getHandler('member');
76: $value = is_array($value) ? $value : (empty($value) ? array() : array($value));
77: $selectedUsers = array();
78: if (count($value) > 0) {
79:
80: $criteria = new Criteria('uid', '(' . implode(',', $value) . ')', 'IN');
81: $criteria->setSort('uname');
82: $criteria->setOrder('ASC');
83: $selectedUsers = $member_handler->getUserList($criteria);
84: }
85:
86:
87:
88: if (empty($queryCache)) {
89: XoopsLoad::load('XoopsCache');
90: $queryCache = XoopsCache::read($cachekey);
91: if ($queryCache === false) {
92: $criteria = new CriteriaCompo();
93: if ($limit <= $member_handler->getUserCount()) {
94:
95: $criteria->setLimit($limit);
96: $criteria->setSort('last_login');
97: $criteria->setOrder('DESC');
98: } else {
99: $criteria->setSort('uname');
100: $criteria->setOrder('ASC');
101: }
102: $queryCache = $member_handler->getUserList($criteria);
103: asort($queryCache);
104: XoopsCache::write($cachekey, $queryCache, $cachettl);
105: }
106: }
107:
108:
109: $users = $selectedUsers + $queryCache;
110:
111: $select_element->addOptionArray($users);
112: if ($limit > count($users)) {
113: parent::__construct($caption, '', $name);
114: $this->addElement($select_element);
115:
116: return null;
117: }
118:
119: xoops_loadLanguage('findusers');
120: $js_addusers = "
121: function addusers(opts)
122: {
123: var num = opts.substring(0, opts.indexOf(':'));
124: opts = opts.substring(opts.indexOf(':')+1, opts.length);
125: var sel = xoopsGetElementById('" . $name . "');
126: var arr = new Array(num);
127: for (var n=0; n < num; n++) {
128: var nm = opts.substring(0, opts.indexOf(':'));
129: opts = opts.substring(opts.indexOf(':')+1, opts.length);
130: var val = opts.substring(0, opts.indexOf(':'));
131: opts = opts.substring(opts.indexOf(':')+1, opts.length);
132: var txt = opts.substring(0, nm - val.length);
133: opts = opts.substring(nm - val.length, opts.length);
134: var added = false;
135: for (var k = 0; k < sel.options.length; k++) {
136: if (sel.options[k].value == val) {
137: added = true;
138: break;
139: }
140: }
141: if (added == false) {
142: sel.options[k] = new Option(txt, val);
143: sel.options[k].selected = true;
144: }
145: }
146:
147: return true;
148: }";
149: $token = $GLOBALS['xoopsSecurity']->createToken();
150: $action_tray = new XoopsFormElementTray('', '');
151: $removeUsers = new XoopsFormButton('', 'rmvusr_' . $name, _MA_USER_REMOVE, 'button');
152: $removeUsers->setExtra(' onclick="var sel = xoopsGetElementById(\'' . $name . '\');for (var i = sel.options.length-1; i >= 0; i--) {if (!sel.options[i].selected) {sel.options[i] = null;}}; return false;" ');
153: $action_tray->addElement($removeUsers);
154:
155: $searchUsers = new XoopsFormButton('', 'srchusr_' . $name, _MA_USER_MORE, 'button');
156: $searchUsers->setExtra(' onclick="openWithSelfMain(\'' . XOOPS_URL . '/include/findusers.php?target=' . $name . '&multiple=' . $multiple . '&token=' . $token . '\', \'userselect\', 800, 600, null); return false;" ');
157: $action_tray->addElement($searchUsers);
158:
159: if (isset($GLOBALS['xoTheme']) && is_object($GLOBALS['xoTheme'])) {
160: $GLOBALS['xoTheme']->addScript('', array(), $js_addusers);
161: } else {
162: echo '<script>' . $js_addusers . '</script>';
163: }
164: parent::__construct($caption, '', $name);
165: $this->addElement($select_element);
166: $this->addElement($action_tray);
167: }
168: }
169: