/** * Constructor * * @param string $caption caption * @param string $name element name * @param bool $include_anon Include user "anonymous"? * @param mixed $value Pre-selected value (or array of them). * For an item with massive members, such as "Registered Users", * "$value" should be used to store selected temporary users only * instead of all members of that item * @param int $size Number or rows. "1" makes a drop-down-list. * @param bool $multiple Allow multiple selections? */ public function __construct($caption, $name, $include_anon = false, $value = null, $size = 1, $multiple = false) { $xoops = \Xoops::getInstance(); $limit = 200; $select_element = new Select('', $name, $value, $size, $multiple); if ($include_anon) { $select_element->addOption(0, $xoops->getConfig('anonymous')); } $member_handler = $xoops->getHandlerMember(); $user_count = $member_handler->getUserCount(); $value = is_array($value) ? $value : (empty($value) ? array() : array($value)); if ($user_count > $limit && count($value) > 0) { $criteria = new CriteriaCompo(new Criteria('uid', '(' . implode(',', $value) . ')', 'IN')); } else { $criteria = new CriteriaCompo(); $criteria->setLimit($limit); } $criteria->setSort('uname'); $criteria->setOrder('ASC'); $users = $member_handler->getUserList($criteria); $select_element->addOptionArray($users); if ($user_count <= $limit) { parent::__construct($caption, "", $name); $this->addElement($select_element); return; } $js_addusers = "<script type='text/javascript'>\n function addusers(opts){\n var num = opts.substring(0, opts.indexOf(':'));\n opts = opts.substring(opts.indexOf(':')+1, opts.length);\n var sel = xoopsGetElementById('" . $name . "');\n var arr = new Array(num);\n for (var n=0; n < num; n++) {\n var nm = opts.substring(0, opts.indexOf(':'));\n opts = opts.substring(opts.indexOf(':')+1, opts.length);\n var val = opts.substring(0, opts.indexOf(':'));\n opts = opts.substring(opts.indexOf(':')+1, opts.length);\n var txt = opts.substring(0, nm - val.length);\n opts = opts.substring(nm - val.length, opts.length);\n var added = false;\n for (var k = 0; k < sel.options.length; k++) {\n if(sel.options[k].value == val){\n added = true;\n break;\n }\n }\n if (added == false) {\n sel.options[k] = new Option(txt, val);\n sel.options[k].selected = true;\n }\n }\n return true;\n }\n </script>"; $token = $xoops->security()->createToken(); $action_tray = new ElementTray("", " | "); $action_tray->addElement(new Label('', '<a href="#" 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;">' . \XoopsLocale::REMOVE_UNSELECTED_USERS . "</a>")); $action_tray->addElement(new Label('', '<a href="#" onclick="openWithSelfMain(\'' . \XoopsBaseConfig::get('url') . '/include/findusers.php?target=' . $name . '&multiple=' . $multiple . '&token=' . $token . '\', \'userselect\', 800, 600, null); return false;" >' . \XoopsLocale::SEARCH_USERS . "</a>" . $js_addusers)); parent::__construct($caption, '<br /><br />', $name); $this->addElement($select_element); $this->addElement($action_tray); }
/** * Constructor * * @param string|array $caption Caption or array of all attributes * Control attributes: * :include_anon true to include anonymous groups * @param string $name element name * @param boolean $include_anon Include group "anonymous"? * @param mixed $value Pre-selected value (or array of them). * @param integer $size Number or rows. "1" makes a drop-down-list. * @param boolean $multiple Allow multiple selections? */ public function __construct($caption, $name = null, $include_anon = false, $value = null, $size = 1, $multiple = false) { parent::__construct($caption, $name, $value, $size, $multiple); $member_handler = \Xoops::getInstance()->getHandlerMember(); if ($include_anon || $this->get(':include_anon', false)) { $this->addOptionArray($member_handler->getGroupList()); } else { $this->addOptionArray($member_handler->getGroupList(new Criteria('groupid', FixedGroups::ANONYMOUS, '!='))); } }