/** * Constructor * * @param string $caption * @param string $name * @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 bool $include_anon Include user "anonymous"? * @param int $size Number or rows. "1" makes a drop-down-list. * @param bool $multiple Allow multiple selections? */ function __construct($caption, $name, $include_anon = false, $value = null, $size = 1, $multiple = false) { $limit = 200; $select_element = new Xmf_Form_Element_Select("", $name, $value, $size, $multiple); if ($include_anon) { $select_element->addOption(0, $GLOBALS["xoopsConfig"]['anonymous']); } $member_handler =& xoops_gethandler('member'); $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; } xoops_loadLanguage("findusers"); $js_addusers = "<script type=\"text/javascript\">\r\n function addusers(opts){\r\n var num = opts.substring(0, opts.indexOf(\":\"));\r\n opts = opts.substring(opts.indexOf(\":\")+1, opts.length);\r\n var sel = xoopsGetElementById(\"" . $name . ($multiple ? "[]" : "") . "\");\r\n var arr = new Array(num);\r\n for (var n=0; n < num; n++) {\r\n var nm = opts.substring(0, opts.indexOf(\":\"));\r\n opts = opts.substring(opts.indexOf(\":\")+1, opts.length);\r\n var val = opts.substring(0, opts.indexOf(\":\"));\r\n opts = opts.substring(opts.indexOf(\":\")+1, opts.length);\r\n var txt = opts.substring(0, nm - val.length);\r\n opts = opts.substring(nm - val.length, opts.length);\r\n var added = false;\r\n for (var k = 0; k < sel.options.length; k++) {\r\n if(sel.options[k].value == val){\r\n added = true;\r\n break;\r\n }\r\n }\r\n if (added == false) {\r\n sel.options[k] = new Option(txt, val);\r\n sel.options[k].selected = true;\r\n }\r\n }\r\n return true;\r\n }\r\n </script>"; $token = $GLOBALS['xoopsSecurity']->createToken(); $action_tray = new Xmf_Form_Element_Tray("", " | "); $action_tray->addElement(new Xmf_Form_Element_Label('', "<a href='#' onclick='var sel = xoopsGetElementById(\"" . $name . ($multiple ? "[]" : "") . "\");for (var i = sel.options.length-1; i >= 0; i--) {if (!sel.options[i].selected) {sel.options[i] = null;}}; return false;'>" . _MA_USER_REMOVE . "</a>")); $action_tray->addElement(new Xmf_Form_Element_Label('', "<a href='#' onclick='openWithSelfMain(\"" . XOOPS_URL . "/include/findusers.php?target={$name}&multiple={$multiple}&token={$token}\", \"userselect\", 800, 600, null); return false;' >" . _MA_USER_MORE . "</a>" . $js_addusers)); parent::__construct($caption, "<br /><br />", $name); $this->addElement($select_element); $this->addElement($action_tray); }
/** * Add an element to the form * * @param string $form_name name of the form * @param string $title caption of the form * @param string $submit_button_caption caption of the button */ function createButtons($form_name, $title, $submit_button_caption = false) { $button_tray = new Xmf_Form_Element_Tray('', ''); $button_tray->addElement(new Xmf_Form_Element_Hidden('op', $form_name)); if (!$submit_button_caption) { if ($this->targetObject->isNew()) { $butt_create = new Xmf_Form_Element_Button('', 'create_button', _FORM_XMF_CREATE, 'submit'); } else { $butt_create = new Xmf_Form_Element_Button('', 'modify_button', _FORM_XMF_MODIFY, 'submit'); } } else { $butt_create = new Xmf_Form_Element_Button('', 'modify_button', $submit_button_caption, 'submit'); } $butt_create->setExtra('onclick="this.form.elements.op.value=\'' . $form_name . '\'"'); $button_tray->addElement($butt_create); //creating custom buttons if ($this->_custom_button) { foreach ($this->_custom_button as $custom_button) { $butt_custom = new Xmf_Form_Element_Button('', $custom_button['name'], $custom_button['caption'], 'submit'); if ($custom_button['onclick']) { $butt_custom->setExtra('onclick="' . $custom_button['onclick'] . '"'); } $button_tray->addElement($butt_custom); unset($butt_custom); } } // creating the "cancel" button $butt_cancel = new Xmf_Form_Element_Button('', 'cancel_button', _FORM_XMF_CANCEL, 'button'); if ($this->_cancel_js_action) { $butt_cancel->setExtra('onclick="' . $this->_cancel_js_action . '"'); } else { $butt_cancel->setExtra('onclick="history.go(-1)"'); } $button_tray->addElement($butt_cancel); $this->addElement($button_tray); }
/** * Renders the form * * @return string * @access public */ function render() { // load all child ids for javascript codes foreach (array_keys($this->_itemTree) as $item_id) { $this->_itemTree[$item_id]['allchild'] = array(); $this->_loadAllChildItemIds($item_id, $this->_itemTree[$item_id]['allchild']); } $gperm_handler =& xoops_gethandler('groupperm'); $member_handler =& xoops_gethandler('member'); $glist = $member_handler->getGroupList(); foreach (array_keys($glist) as $i) { if ($i == XOOPS_GROUP_ANONYMOUS && !$this->_showAnonymous) { continue; } // get selected item id(s) for each group $selected = $gperm_handler->getItemIds($this->_permName, $i, $this->_modid); $ele = new Xmf_Form_Element_Checkbox_Group($glist[$i], 'perms[' . $this->_permName . ']', $i, $selected); $ele->setOptionTree($this->_itemTree); $this->addElement($ele); unset($ele); } $tray = new Xmf_Form_Element_Tray(''); $tray->addElement(new Xmf_Form_Element_Button('', 'submit', _SUBMIT, 'submit')); $tray->addElement(new Xmf_Form_Element_Button('', 'reset', _CANCEL, 'reset')); $this->addElement($tray); $ret = '<h4>' . $this->getTitle() . '</h4>'; if ($this->_permDesc) { $ret .= $this->_permDesc . '<br /><br />'; } $ret .= "<form name='" . $this->getName() . "' id='" . $this->getName() . "' action='" . $this->getAction() . "' method='" . $this->getMethod() . "'" . $this->getExtra() . ">\n<table width='100%' class='outer' cellspacing='1' valign='top'>\n"; $elements = $this->getElements(); $hidden = ''; foreach (array_keys($elements) as $i) { if (!is_object($elements[$i])) { $ret .= $elements[$i]; } elseif (!$elements[$i]->isHidden()) { $ret .= "<tr valign='top' align='left'><td class='head'>" . $elements[$i]->getCaption(); if ($elements[$i]->getDescription() != '') { $ret .= '<br /><br /><span style="font-weight: normal;">' . $elements[$i]->getDescription() . '</span>'; } $ret .= "</td>\n<td class='even'>\n" . $elements[$i]->render() . "\n</td></tr>\n"; } else { $hidden .= $elements[$i]->render(); } } $ret .= "</table>{$hidden}</form>"; $ret .= $this->renderValidationJS(true); return $ret; }