1: | <?php
|
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: |
|
11: |
|
12: | namespace Xmf\Module\Helper;
|
13: |
|
14: | use Xmf\Module\Helper;
|
15: |
|
16: | |
17: | |
18: | |
19: | |
20: | |
21: | |
22: | |
23: | |
24: | |
25: | |
26: |
|
27: | class Permission extends AbstractHelper
|
28: | {
|
29: | |
30: | |
31: |
|
32: | protected $mid;
|
33: |
|
34: | |
35: | |
36: |
|
37: | protected $dirname;
|
38: |
|
39: | |
40: | |
41: |
|
42: | protected $permissionHandler;
|
43: |
|
44: | |
45: | |
46: | |
47: | |
48: |
|
49: | public function init()
|
50: | {
|
51: | $this->mid = $this->module->getVar('mid');
|
52: | $this->dirname = $this->module->getVar('dirname');
|
53: |
|
54: | $this->permissionHandler = xoops_getHandler('groupperm');
|
55: | }
|
56: |
|
57: | |
58: | |
59: | |
60: | |
61: | |
62: | |
63: | |
64: | |
65: |
|
66: | public function checkPermission($gperm_name, $gperm_itemid, $trueifadmin = true)
|
67: | {
|
68: | $gperm_itemid = (int) $gperm_itemid;
|
69: | $gperm_groupid = $this->getUserGroups();
|
70: |
|
71: | if ($this->permissionHandler) {
|
72: | return $this->permissionHandler->checkRight(
|
73: | $gperm_name,
|
74: | $gperm_itemid,
|
75: | $gperm_groupid,
|
76: | $this->mid,
|
77: | (bool)$trueifadmin
|
78: | );
|
79: | } else {
|
80: | return false;
|
81: | }
|
82: | }
|
83: |
|
84: | |
85: | |
86: | |
87: | |
88: | |
89: | |
90: | |
91: | |
92: |
|
93: | public function getItemIds($gperm_name, $gperm_groupid)
|
94: | {
|
95: | return $this->permissionHandler->getItemIds(
|
96: | $gperm_name,
|
97: | $gperm_groupid,
|
98: | $this->mid
|
99: | );
|
100: | }
|
101: |
|
102: | |
103: | |
104: | |
105: | |
106: | |
107: | |
108: | |
109: | |
110: | |
111: | |
112: | |
113: |
|
114: | public function checkPermissionRedirect(
|
115: | $gperm_name,
|
116: | $gperm_itemid,
|
117: | $url,
|
118: | $time = 3,
|
119: | $message = '',
|
120: | $trueifadmin = true
|
121: | ) {
|
122: | $gperm_itemid = (int) $gperm_itemid;
|
123: | $gperm_groupid = $this->getUserGroups();
|
124: | $permission = $this->permissionHandler->checkRight(
|
125: | $gperm_name,
|
126: | $gperm_itemid,
|
127: | $gperm_groupid,
|
128: | $this->mid,
|
129: | (bool) $trueifadmin
|
130: | );
|
131: | if (!$permission) {
|
132: | $helper = Helper::getHelper($this->dirname);
|
133: | $helper->redirect($url, $time, $message);
|
134: | }
|
135: | }
|
136: |
|
137: | |
138: | |
139: | |
140: | |
141: | |
142: | |
143: | |
144: |
|
145: | public function getGroupsForItem($gperm_name, $gperm_itemid)
|
146: | {
|
147: | $gperm_itemid = (int) $gperm_itemid;
|
148: | return $this->permissionHandler->getGroupIds($gperm_name, $gperm_itemid, $this->mid);
|
149: | }
|
150: |
|
151: | |
152: | |
153: | |
154: | |
155: | |
156: | |
157: | |
158: | |
159: |
|
160: | public function savePermissionForItem($gperm_name, $gperm_itemid, $groups)
|
161: | {
|
162: | $gperm_itemid = (int) $gperm_itemid;
|
163: | foreach ($groups as $index => $group) {
|
164: | $groups[$index] = (int) $group;
|
165: | }
|
166: |
|
167: | $result = true;
|
168: |
|
169: |
|
170: | $this->deletePermissionForItem($gperm_name, $gperm_itemid);
|
171: |
|
172: |
|
173: | if (count($groups) > 0) {
|
174: | foreach ($groups as $group_id) {
|
175: | $this->permissionHandler->addRight(
|
176: | $gperm_name,
|
177: | $gperm_itemid,
|
178: | $group_id,
|
179: | $this->mid
|
180: | );
|
181: | }
|
182: | }
|
183: |
|
184: | return $result;
|
185: | }
|
186: |
|
187: | |
188: | |
189: | |
190: | |
191: | |
192: | |
193: | |
194: |
|
195: | public function deletePermissionForItem($gperm_name, $gperm_itemid)
|
196: | {
|
197: | $gperm_itemid = (int) $gperm_itemid;
|
198: | if (!is_array($gperm_name)) {
|
199: | $gperm_name = (array) $gperm_name;
|
200: | }
|
201: | $return = true;
|
202: | foreach ($gperm_name as $pname) {
|
203: | $return = $return && $this->permissionHandler->deleteByModule($this->mid, $pname, $gperm_itemid);
|
204: | }
|
205: | return $return;
|
206: | }
|
207: |
|
208: | |
209: | |
210: | |
211: | |
212: | |
213: | |
214: | |
215: | |
216: | |
217: | |
218: | |
219: | |
220: | |
221: | |
222: |
|
223: | public function getGroupSelectFormForItem(
|
224: | $gperm_name,
|
225: | $gperm_itemid,
|
226: | $caption,
|
227: | $name = null,
|
228: | $include_anon = false,
|
229: | $size = 5,
|
230: | $multiple = true
|
231: | ) {
|
232: | if (!class_exists('XoopsFormSelectGroup', true)) {
|
233: | include_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php';
|
234: | }
|
235: | if (empty($name)) {
|
236: | $name = $this->defaultFieldName($gperm_name, $gperm_itemid);
|
237: | }
|
238: | $gperm_itemid = (int) $gperm_itemid;
|
239: | $value = $this->getGroupsForItem($gperm_name, $gperm_itemid);
|
240: | $element = new \XoopsFormSelectGroup(
|
241: | $caption,
|
242: | $name,
|
243: | $include_anon,
|
244: | $value,
|
245: | $size,
|
246: | $multiple
|
247: | );
|
248: |
|
249: | return $element;
|
250: | }
|
251: |
|
252: | |
253: | |
254: | |
255: | |
256: | |
257: | |
258: | |
259: | |
260: |
|
261: | public function defaultFieldName($gperm_name, $gperm_itemid)
|
262: | {
|
263: | $gperm_itemid = (int) $gperm_itemid;
|
264: | $name = $this->module->getVar('dirname') . '_' .
|
265: | $gperm_name . '_' . $gperm_itemid;
|
266: |
|
267: | return $name;
|
268: | }
|
269: |
|
270: | |
271: | |
272: | |
273: | |
274: |
|
275: | protected function getUserGroups()
|
276: | {
|
277: | global $xoopsUser;
|
278: |
|
279: | $groups = $xoopsUser ? $xoopsUser->getGroups() : XOOPS_GROUP_ANONYMOUS;
|
280: |
|
281: | return $groups;
|
282: | }
|
283: | }
|
284: | |