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: | |