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: | sel.options[k].selected = true;
|
139: | break;
|
140: | }
|
141: | }
|
142: | if (added == false) {
|
143: | sel.options[k] = new Option(txt, val);
|
144: | sel.options[k].selected = true;
|
145: | }
|
146: | }
|
147: |
|
148: | return true;
|
149: | }";
|
150: | $token = $GLOBALS['xoopsSecurity']->createToken();
|
151: | $action_tray = new XoopsFormElementTray('', '');
|
152: | $removeUsers = new XoopsFormButton('', 'rmvusr_' . $name, _MA_USER_REMOVE, 'button');
|
153: | $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;" ');
|
154: | $action_tray->addElement($removeUsers);
|
155: |
|
156: | $searchUsers = new XoopsFormButton('', 'srchusr_' . $name, _MA_USER_MORE, 'button');
|
157: | $searchUsers->setExtra(' onclick="openWithSelfMain(\'' . XOOPS_URL . '/include/findusers.php?target=' . $name . '&multiple=' . $multiple . '&token=' . $token . '\', \'userselect\', 800, 600, null); return false;" ');
|
158: | $action_tray->addElement($searchUsers);
|
159: |
|
160: | if (isset($GLOBALS['xoTheme']) && is_object($GLOBALS['xoTheme'])) {
|
161: | $GLOBALS['xoTheme']->addScript('', array(), $js_addusers);
|
162: | } else {
|
163: | echo '<script>' . $js_addusers . '</script>';
|
164: | }
|
165: | parent::__construct($caption, '', $name);
|
166: | $this->addElement($select_element);
|
167: | $this->addElement($action_tray);
|
168: | }
|
169: | }
|
170: | |