| 1: | <?php
|
| 2: | |
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: | |
| 10: | |
| 11: | |
| 12: | |
| 13: | |
| 14: | |
| 15: | |
| 16: | |
| 17: |
|
| 18: |
|
| 19: | defined('XOOPS_ROOT_PATH') || exit('Restricted access');
|
| 20: |
|
| 21: | xoops_load('XoopsFormElement');
|
| 22: | xoops_load('XoopsFormHidden');
|
| 23: | xoops_load('XoopsFormHiddenToken');
|
| 24: | xoops_load('XoopsForm');
|
| 25: | xoops_load('XoopsFormElementTray');
|
| 26: | xoops_load('XoopsFormButton');
|
| 27: |
|
| 28: | |
| 29: | |
| 30: |
|
| 31: | class XoopsGroupPermForm extends XoopsForm
|
| 32: | {
|
| 33: | |
| 34: | |
| 35: | |
| 36: | |
| 37: |
|
| 38: | public $_modid;
|
| 39: | |
| 40: | |
| 41: | |
| 42: | |
| 43: |
|
| 44: | public $_itemTree = array();
|
| 45: | |
| 46: | |
| 47: | |
| 48: | |
| 49: |
|
| 50: | public $_permName;
|
| 51: | |
| 52: | |
| 53: | |
| 54: | |
| 55: |
|
| 56: | public $_permDesc;
|
| 57: |
|
| 58: | |
| 59: | |
| 60: | |
| 61: | |
| 62: |
|
| 63: | public $_showAnonymous;
|
| 64: |
|
| 65: | |
| 66: | |
| 67: | |
| 68: | |
| 69: | |
| 70: | |
| 71: | |
| 72: | |
| 73: |
|
| 74: | public function __construct($title, $modid, $permname, $permdesc, $url = '', $anonymous = true)
|
| 75: | {
|
| 76: | parent::__construct($title, 'groupperm_form', XOOPS_URL . '/modules/system/admin/groupperm.php', 'post');
|
| 77: | $this->_modid = (int)$modid;
|
| 78: | $this->_permName = $permname;
|
| 79: | $this->_permDesc = $permdesc;
|
| 80: | $this->addElement(new XoopsFormHidden('modid', $this->_modid));
|
| 81: | $this->addElement(new XoopsFormHiddenToken($permname));
|
| 82: | if ($url != '') {
|
| 83: | $this->addElement(new XoopsFormHidden('redirect_url', $url));
|
| 84: | }
|
| 85: | $this->_showAnonymous = $anonymous;
|
| 86: | }
|
| 87: |
|
| 88: | |
| 89: | |
| 90: | |
| 91: | |
| 92: | |
| 93: | |
| 94: | |
| 95: |
|
| 96: | public function addItem($itemId, $itemName, $itemParent = 0)
|
| 97: | {
|
| 98: | $this->_itemTree[$itemParent]['children'][] = $itemId;
|
| 99: | $this->_itemTree[$itemId]['parent'] = $itemParent;
|
| 100: | $this->_itemTree[$itemId]['name'] = $itemName;
|
| 101: | $this->_itemTree[$itemId]['id'] = $itemId;
|
| 102: | }
|
| 103: |
|
| 104: | |
| 105: | |
| 106: | |
| 107: | |
| 108: | |
| 109: | |
| 110: |
|
| 111: | public function _loadAllChildItemIds($itemId, &$childIds)
|
| 112: | {
|
| 113: | if (!empty($this->_itemTree[$itemId]['children'])) {
|
| 114: | $first_child = $this->_itemTree[$itemId]['children'];
|
| 115: | foreach ($first_child as $fcid) {
|
| 116: | $childIds[] = $fcid;
|
| 117: | if (!empty($this->_itemTree[$fcid]['children'])) {
|
| 118: | foreach ($this->_itemTree[$fcid]['children'] as $_fcid) {
|
| 119: | $childIds[] = $_fcid;
|
| 120: | $this->_loadAllChildItemIds($_fcid, $childIds);
|
| 121: | }
|
| 122: | }
|
| 123: | }
|
| 124: | }
|
| 125: | }
|
| 126: |
|
| 127: | |
| 128: | |
| 129: | |
| 130: | |
| 131: | |
| 132: |
|
| 133: | public function render()
|
| 134: | {
|
| 135: |
|
| 136: | foreach (array_keys($this->_itemTree) as $item_id) {
|
| 137: | $this->_itemTree[$item_id]['allchild'] = array();
|
| 138: | $this->_loadAllChildItemIds($item_id, $this->_itemTree[$item_id]['allchild']);
|
| 139: | }
|
| 140: |
|
| 141: | $gperm_handler = xoops_getHandler('groupperm');
|
| 142: |
|
| 143: | $member_handler = xoops_getHandler('member');
|
| 144: | $glist = $member_handler->getGroupList();
|
| 145: | foreach (array_keys($glist) as $i) {
|
| 146: | if ($i == XOOPS_GROUP_ANONYMOUS && !$this->_showAnonymous) {
|
| 147: | continue;
|
| 148: | }
|
| 149: |
|
| 150: | $selected = $gperm_handler->getItemIds($this->_permName, $i, $this->_modid);
|
| 151: | $ele = new XoopsGroupFormCheckBox($glist[$i], 'perms[' . $this->_permName . ']', $i, $selected);
|
| 152: | $ele->setOptionTree($this->_itemTree);
|
| 153: | $this->addElement($ele);
|
| 154: | unset($ele);
|
| 155: | }
|
| 156: | $tray = new XoopsFormElementTray('');
|
| 157: | $tray->addElement(new XoopsFormButton('', 'submit', _SUBMIT, 'submit'));
|
| 158: | $tray->addElement(new XoopsFormButton('', 'reset', _CANCEL, 'reset'));
|
| 159: | $this->addElement($tray);
|
| 160: |
|
| 161: | $ret = '<h4>' . $this->getTitle() . '</h4>';
|
| 162: | if ($this->_permDesc) {
|
| 163: | $ret .= $this->_permDesc . '<br><br>';
|
| 164: | }
|
| 165: | $ret .= '<form title="' . str_replace('"', '', $this->getTitle()) . '" name="' . $this->getName() . '" id="' . $this->getName() . '" action="' . $this->getAction() . '" method="' . $this->getMethod() . '"' . $this->getExtra() . '>' . '<table width="100%" class="outer" cellspacing="1" valign="top">';
|
| 166: | $elements =& $this->getElements();
|
| 167: | $hidden = '';
|
| 168: | foreach (array_keys($elements) as $i) {
|
| 169: | if (!is_object($elements[$i])) {
|
| 170: | $ret .= $elements[$i];
|
| 171: | } elseif (!$elements[$i]->isHidden()) {
|
| 172: | $ret .= '<tr valign="top" align="left"><td class="head">' . $elements[$i]->getCaption();
|
| 173: | if ($elements[$i]->getDescription() != '') {
|
| 174: | $ret .= "<br><br><span style='font-weight: normal;'>" . $elements[$i]->getDescription() . '</span>';
|
| 175: | }
|
| 176: | $ret .= '</td>' . '<td class="even">' . $elements[$i]->render() . '</td></tr>' . '';
|
| 177: | } else {
|
| 178: | $hidden .= $elements[$i]->render();
|
| 179: | }
|
| 180: | }
|
| 181: | $ret .= '</table>' . $hidden . '</form>';
|
| 182: | $ret .= $this->renderValidationJS(true);
|
| 183: |
|
| 184: | return $ret;
|
| 185: | }
|
| 186: | }
|
| 187: |
|
| 188: | |
| 189: | |
| 190: |
|
| 191: | class XoopsGroupFormCheckBox extends XoopsFormElement
|
| 192: | {
|
| 193: | |
| 194: | |
| 195: | |
| 196: | |
| 197: |
|
| 198: | public $_value = array();
|
| 199: | |
| 200: | |
| 201: | |
| 202: | |
| 203: |
|
| 204: | public $_groupId;
|
| 205: | |
| 206: | |
| 207: | |
| 208: | |
| 209: |
|
| 210: | public $_optionTree = array();
|
| 211: |
|
| 212: | |
| 213: | |
| 214: | |
| 215: | |
| 216: | |
| 217: | |
| 218: |
|
| 219: | public function __construct($caption, $name, $groupId, $values = null)
|
| 220: | {
|
| 221: | $this->setCaption($caption);
|
| 222: | $this->setName($name);
|
| 223: | if (isset($values)) {
|
| 224: | $this->setValue($values);
|
| 225: | }
|
| 226: | $this->_groupId = $groupId;
|
| 227: | }
|
| 228: |
|
| 229: | |
| 230: | |
| 231: | |
| 232: | |
| 233: | |
| 234: |
|
| 235: | public function setValue($value)
|
| 236: | {
|
| 237: | if (is_array($value)) {
|
| 238: | foreach ($value as $v) {
|
| 239: | $this->setValue($v);
|
| 240: | }
|
| 241: | } else {
|
| 242: | $this->_value[] = $value;
|
| 243: | }
|
| 244: | }
|
| 245: |
|
| 246: | |
| 247: | |
| 248: | |
| 249: | |
| 250: | |
| 251: |
|
| 252: | public function setOptionTree(&$optionTree)
|
| 253: | {
|
| 254: | $this->_optionTree = &$optionTree;
|
| 255: | }
|
| 256: |
|
| 257: | |
| 258: | |
| 259: | |
| 260: | |
| 261: | |
| 262: |
|
| 263: | public function render()
|
| 264: | {
|
| 265: | $ele_name = $this->getName();
|
| 266: | $ret = '<table class="outer"><tr><td class="odd"><table><tr>';
|
| 267: | $cols = 1;
|
| 268: | foreach ($this->_optionTree[0]['children'] as $topitem) {
|
| 269: | if ($cols > 4) {
|
| 270: | $ret .= '</tr><tr>';
|
| 271: | $cols = 1;
|
| 272: | }
|
| 273: | $tree = '<td valign="top">';
|
| 274: | $prefix = '';
|
| 275: | $this->_renderOptionTree($tree, $this->_optionTree[$topitem], $prefix);
|
| 276: | $ret .= $tree . '</td>';
|
| 277: | ++$cols;
|
| 278: | }
|
| 279: | $ret .= '</tr></table></td><td class="even" valign="top">';
|
| 280: | $option_ids = array();
|
| 281: | foreach (array_keys($this->_optionTree) as $id) {
|
| 282: | if (!empty($id)) {
|
| 283: | $option_ids[] = "'" . $ele_name . '[groups][' . $this->_groupId . '][' . $id . ']' . "'";
|
| 284: | }
|
| 285: | }
|
| 286: | $checkallbtn_id = $ele_name . '[checkallbtn][' . $this->_groupId . ']';
|
| 287: | $option_ids_str = implode(', ', $option_ids);
|
| 288: | $ret .= _ALL . " <input id=\"" . $checkallbtn_id . "\" type=\"checkbox\" value=\"\" onclick=\"var optionids = new Array(" . $option_ids_str . "); xoopsCheckAllElements(optionids, '" . $checkallbtn_id . "');\" />";
|
| 289: | $ret .= '</td></tr></table>';
|
| 290: |
|
| 291: | return $ret;
|
| 292: | }
|
| 293: |
|
| 294: | |
| 295: | |
| 296: | |
| 297: | |
| 298: | |
| 299: | |
| 300: | |
| 301: | |
| 302: |
|
| 303: | public function _renderOptionTree(&$tree, $option, $prefix, $parentIds = array())
|
| 304: | {
|
| 305: | $ele_name = $this->getName();
|
| 306: | $tree .= $prefix . "<input type=\"checkbox\" name=\"" . $ele_name . '[groups][' . $this->_groupId . '][' . $option['id'] . "]\" id=\"" . $ele_name . '[groups][' . $this->_groupId . '][' . $option['id'] . "]\" onclick=\"";
|
| 307: |
|
| 308: |
|
| 309: |
|
| 310: | foreach ($parentIds as $pid) {
|
| 311: | $parent_ele = $ele_name . '[groups][' . $this->_groupId . '][' . $pid . ']';
|
| 312: | $tree .= "var ele = xoopsGetElementById('" . $parent_ele . "'); if(ele.checked != true) {ele.checked = this.checked;}";
|
| 313: | }
|
| 314: |
|
| 315: |
|
| 316: |
|
| 317: |
|
| 318: | foreach ($option['allchild'] as $cid) {
|
| 319: | $child_ele = $ele_name . '[groups][' . $this->_groupId . '][' . $cid . ']';
|
| 320: | $tree .= "var ele = xoopsGetElementById('" . $child_ele . "'); if(this.checked != true) {ele.checked = false;}";
|
| 321: | }
|
| 322: | $tree .= '" value="1"';
|
| 323: | if (in_array($option['id'], $this->_value)) {
|
| 324: | $tree .= ' checked';
|
| 325: | }
|
| 326: | $tree .= ' />' . $option['name'] . "<input type=\"hidden\" name=\"" . $ele_name . '[parents][' . $option['id'] . "]\" value=\"" . implode(':', $parentIds) . "\" /><input type=\"hidden\" name=\"" . $ele_name . '[itemname][' . $option['id'] . "]\" value=\"" . htmlspecialchars($option['name'], ENT_QUOTES) . "\" /><br>\n";
|
| 327: | if (isset($option['children'])) {
|
| 328: | foreach ($option['children'] as $child) {
|
| 329: | $parentIds[] = $option['id'];
|
| 330: | $this->_renderOptionTree($tree, $this->_optionTree[$child], $prefix . ' -', $parentIds);
|
| 331: | }
|
| 332: | }
|
| 333: | }
|
| 334: | }
|
| 335: | |