|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
namespace XoopsModules\Modulebuilder\Files\Admin; |
|
4
|
|
|
|
|
5
|
|
|
use XoopsModules\Modulebuilder; |
|
6
|
|
|
use XoopsModules\Modulebuilder\Files; |
|
7
|
|
|
|
|
8
|
|
|
/* |
|
9
|
|
|
You may not change or alter any portion of this comment or credits |
|
10
|
|
|
of supporting developers from this source code or any supporting source code |
|
11
|
|
|
which is considered copyrighted (c) material of the original comment or credit authors. |
|
12
|
|
|
|
|
13
|
|
|
This program is distributed in the hope that it will be useful, |
|
14
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
15
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
16
|
|
|
*/ |
|
17
|
|
|
/** |
|
18
|
|
|
* modulebuilder module. |
|
19
|
|
|
* |
|
20
|
|
|
* @copyright XOOPS Project (https://xoops.org) |
|
21
|
|
|
* @license GNU GPL 2 (https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) |
|
22
|
|
|
* |
|
23
|
|
|
* @since 2.5.0 |
|
24
|
|
|
* |
|
25
|
|
|
* @author Txmod Xoops https://xoops.org |
|
26
|
|
|
* Goffy https://myxoops.org |
|
27
|
|
|
* |
|
28
|
|
|
*/ |
|
29
|
|
|
|
|
30
|
|
|
/** |
|
31
|
|
|
* Class AdminPermissions. |
|
32
|
|
|
*/ |
|
33
|
|
|
class AdminPermissions extends Files\CreateFile |
|
34
|
|
|
{ |
|
35
|
|
|
/** |
|
36
|
|
|
* @var mixed |
|
37
|
|
|
*/ |
|
38
|
|
|
private $axc = null; |
|
39
|
|
|
|
|
40
|
|
|
/** |
|
41
|
|
|
* @var mixed |
|
42
|
|
|
*/ |
|
43
|
|
|
private $xc = null; |
|
44
|
|
|
|
|
45
|
|
|
/** |
|
46
|
|
|
* @var mixed |
|
47
|
|
|
*/ |
|
48
|
|
|
private $pc = null; |
|
49
|
|
|
|
|
50
|
|
|
/** |
|
51
|
|
|
* @var mixed |
|
52
|
|
|
*/ |
|
53
|
|
|
private $cxc = null; |
|
54
|
|
|
|
|
55
|
|
|
/** |
|
56
|
|
|
* @public function constructor |
|
57
|
|
|
* @param null |
|
58
|
|
|
*/ |
|
59
|
|
|
public function __construct() |
|
60
|
|
|
{ |
|
61
|
|
|
parent::__construct(); |
|
62
|
|
|
$this->xc = Modulebuilder\Files\CreateXoopsCode::getInstance(); |
|
63
|
|
|
$this->pc = Modulebuilder\Files\CreatePhpCode::getInstance(); |
|
64
|
|
|
$this->axc = Modulebuilder\Files\Admin\AdminXoopsCode::getInstance(); |
|
65
|
|
|
$this->cxc = Modulebuilder\Files\Classes\ClassXoopsCode::getInstance(); |
|
66
|
|
|
} |
|
67
|
|
|
|
|
68
|
|
|
/** |
|
69
|
|
|
* @static function getInstance |
|
70
|
|
|
* |
|
71
|
|
|
* @param null |
|
72
|
|
|
* |
|
73
|
|
|
* @return AdminPermissions |
|
74
|
|
|
*/ |
|
75
|
|
|
public static function getInstance() |
|
76
|
|
|
{ |
|
77
|
|
|
static $instance = false; |
|
78
|
|
|
if (!$instance) { |
|
79
|
|
|
$instance = new self(); |
|
80
|
|
|
} |
|
81
|
|
|
|
|
82
|
|
|
return $instance; |
|
83
|
|
|
} |
|
84
|
|
|
|
|
85
|
|
|
/** |
|
86
|
|
|
* @public function write |
|
87
|
|
|
* |
|
88
|
|
|
* @param string $module |
|
89
|
|
|
* @param mixed $tables |
|
90
|
|
|
* @param string $filename |
|
91
|
|
|
* |
|
92
|
|
|
* @return null |
|
93
|
|
|
*/ |
|
94
|
|
|
public function write($module, $tables, $filename) |
|
95
|
|
|
{ |
|
96
|
|
|
$this->setModule($module); |
|
97
|
|
|
$this->setTables($tables); |
|
98
|
|
|
$this->setFileName($filename); |
|
99
|
|
|
return null; |
|
100
|
|
|
} |
|
101
|
|
|
|
|
102
|
|
|
/** |
|
103
|
|
|
* @private function getPermissionsHeader |
|
104
|
|
|
* |
|
105
|
|
|
* @param $module |
|
106
|
|
|
* @param $language |
|
107
|
|
|
* |
|
108
|
|
|
* @return string |
|
109
|
|
|
*/ |
|
110
|
|
|
private function getPermissionsHeader($module, $language) |
|
111
|
|
|
{ |
|
112
|
|
|
$moduleDirname = $module->getVar('mod_dirname'); |
|
113
|
|
|
$tables = $this->getTableTables($module->getVar('mod_id')); |
|
114
|
|
|
$tableNames = []; |
|
115
|
|
|
foreach (\array_keys($tables) as $t) { |
|
116
|
|
|
if (1 == $tables[$t]->getVar('table_permissions')) { |
|
117
|
|
|
$tableNames[] = $tables[$t]->getVar('table_name'); |
|
118
|
|
|
} |
|
119
|
|
|
} |
|
120
|
|
|
$ret = $this->pc->getPhpCodeUseNamespace(['Xmf', 'Request'], '', ''); |
|
121
|
|
|
$ret .= $this->pc->getPhpCodeUseNamespace(['XoopsModules', $moduleDirname], '', ''); |
|
122
|
|
|
$ret .= $this->pc->getPhpCodeUseNamespace(['XoopsModules', $moduleDirname, 'Constants']); |
|
123
|
|
|
$ret .= $this->getRequire('header'); |
|
124
|
|
|
$ret .= $this->pc->getPhpCodeBlankLine(); |
|
125
|
|
|
$ret .= $this->pc->getPhpCodeCommentLine('Template Index'); |
|
126
|
|
|
$ret .= $this->axc->getAdminTemplateMain($moduleDirname, 'permissions'); |
|
127
|
|
|
$ret .= $this->xc->getXcXoopsTplAssign('navigation', "\$adminObject->displayNavigation('permissions.php')"); |
|
128
|
|
|
$ret .= $this->pc->getPhpCodeBlankLine(); |
|
129
|
|
|
$ret .= $this->xc->getXcXoopsRequest('op', 'op', 'global', 'Cmd'); |
|
130
|
|
|
$ret .= $this->pc->getPhpCodeBlankLine(); |
|
131
|
|
|
$ret .= $this->pc->getPhpCodeCommentLine('Get Form'); |
|
132
|
|
|
$ret .= $this->pc->getPhpCodeIncludeDir('\XOOPS_ROOT_PATH', 'class/xoopsform/grouppermform', true); |
|
133
|
|
|
$ret .= $this->xc->getXcXoopsLoad('XoopsFormLoader'); |
|
134
|
|
|
$optionsSelect['global'] = "{$language}PERMISSIONS_GLOBAL"; |
|
|
|
|
|
|
135
|
|
|
foreach ($tableNames as $tableName) { |
|
136
|
|
|
$ucfTablename = \ucfirst($tableName); |
|
137
|
|
|
$optionsSelect["approve_{$tableName}"] = "{$language}PERMISSIONS_APPROVE . ' {$ucfTablename}'"; |
|
138
|
|
|
$optionsSelect["submit_{$tableName}"] = "{$language}PERMISSIONS_SUBMIT . ' {$ucfTablename}'"; |
|
139
|
|
|
$optionsSelect["view_{$tableName}"] = "{$language}PERMISSIONS_VIEW . ' {$ucfTablename}'"; |
|
140
|
|
|
} |
|
141
|
|
|
$formSelect = $this->xc->getXoopsFormSelectExtraOptions('formSelect', '\'\'', 'op', $optionsSelect, 'onchange="document.fselperm.submit()"'); |
|
142
|
|
|
$ret .= $this->cxc->getXoopsSimpleForm('permTableForm', 'formSelect', $formSelect, '\'\'', 'fselperm', 'permissions'); |
|
143
|
|
|
|
|
144
|
|
|
return $ret; |
|
145
|
|
|
} |
|
146
|
|
|
|
|
147
|
|
|
/** |
|
148
|
|
|
* @private function getPermissionsSwitch |
|
149
|
|
|
* @param $module |
|
150
|
|
|
* @param $language |
|
151
|
|
|
* |
|
152
|
|
|
* @return string |
|
153
|
|
|
*/ |
|
154
|
|
|
private function getPermissionsSwitch($module, $language) |
|
155
|
|
|
{ |
|
156
|
|
|
$moduleDirname = $module->getVar('mod_dirname'); |
|
157
|
|
|
$tables = $this->getTableTables($module->getVar('mod_id')); |
|
158
|
|
|
$t = "\t\t"; |
|
159
|
|
|
$n = "\n"; |
|
160
|
|
|
$cases['global']= [ |
|
|
|
|
|
|
161
|
|
|
"{$t}\$formTitle = {$language}PERMISSIONS_GLOBAL;{$n}", |
|
162
|
|
|
"{$t}\$permName = '{$moduleDirname}_ac';{$n}", |
|
163
|
|
|
"{$t}\$permDesc = {$language}PERMISSIONS_GLOBAL_DESC;{$n}", |
|
164
|
|
|
"{$t}\$globalPerms = ['4' => {$language}PERMISSIONS_GLOBAL_4, '8' => {$language}PERMISSIONS_GLOBAL_8, '16' => {$language}PERMISSIONS_GLOBAL_16 ];{$n}", |
|
165
|
|
|
]; |
|
166
|
|
|
foreach (\array_keys($tables) as $i) { |
|
167
|
|
|
if (1 == $tables[$i]->getVar('table_permissions')) { |
|
168
|
|
|
$tableName = $tables[$i]->getVar('table_name'); |
|
169
|
|
|
$ucfTablename = \ucfirst($tableName); |
|
170
|
|
|
$cases["approve_{$tableName}"] = [ |
|
171
|
|
|
"{$t}\$formTitle = {$language}PERMISSIONS_APPROVE;{$n}", |
|
172
|
|
|
"{$t}\$permName = '{$moduleDirname}_approve_{$tableName}';{$n}", |
|
173
|
|
|
"{$t}\$permDesc = {$language}PERMISSIONS_APPROVE_DESC . ' {$ucfTablename}';{$n}", |
|
174
|
|
|
"{$t}\$handler = \$helper->getHandler('{$tableName}');{$n}", |
|
175
|
|
|
]; |
|
176
|
|
|
$cases["submit_{$tableName}"] = [ |
|
177
|
|
|
"{$t}\$formTitle = {$language}PERMISSIONS_SUBMIT;{$n}", |
|
178
|
|
|
"{$t}\$permName = '{$moduleDirname}_submit_{$tableName}';{$n}", |
|
179
|
|
|
"{$t}\$permDesc = {$language}PERMISSIONS_SUBMIT_DESC . ' {$ucfTablename}';{$n}", |
|
180
|
|
|
"{$t}\$handler = \$helper->getHandler('{$tableName}');{$n}", |
|
181
|
|
|
]; |
|
182
|
|
|
$cases["view_{$tableName}"] = [ |
|
183
|
|
|
"{$t}\$formTitle = {$language}PERMISSIONS_VIEW;{$n}", |
|
184
|
|
|
"{$t}\$permName = '{$moduleDirname}_view_{$tableName}';{$n}", |
|
185
|
|
|
"{$t}\$permDesc = {$language}PERMISSIONS_VIEW_DESC . ' {$ucfTablename}';{$n}", |
|
186
|
|
|
"{$t}\$handler = \$helper->getHandler('{$tableName}');{$n}", |
|
187
|
|
|
]; |
|
188
|
|
|
} |
|
189
|
|
|
} |
|
190
|
|
|
$contentSwitch = $this->pc->getPhpCodeCaseSwitch($cases, true, false, "\t"); |
|
191
|
|
|
|
|
192
|
|
|
return $this->pc->getPhpCodeSwitch('op', $contentSwitch); |
|
193
|
|
|
} |
|
194
|
|
|
|
|
195
|
|
|
/** |
|
196
|
|
|
* @private function getPermissionsBody |
|
197
|
|
|
* |
|
198
|
|
|
* @param string $module |
|
199
|
|
|
* @param string $language |
|
200
|
|
|
* |
|
201
|
|
|
* @return string |
|
202
|
|
|
*/ |
|
203
|
|
|
private function getPermissionsBody($module, $language) |
|
204
|
|
|
{ |
|
205
|
|
|
$tables = $this->getTableTables($module->getVar('mod_id')); |
|
206
|
|
|
|
|
207
|
|
|
$ret = $this->xc->getXcGetVar('moduleId', 'xoopsModule', 'mid'); |
|
208
|
|
|
$ret .= $this->xc->getXcXoopsFormGroupPerm('permform', '$formTitle', '$moduleId', '$permName', '$permDesc', "'admin/permissions.php'"); |
|
209
|
|
|
$ret .= $this->xc->getXcEqualsOperator('$permFound', 'false'); |
|
210
|
|
|
$foreach1 = $this->xc->getXcAddItem('permform', '$gPermId', '$gPermName', "\t\t"); |
|
211
|
|
|
$if1 = $this->pc->getPhpCodeForeach('globalPerms', false, 'gPermId', 'gPermName', $foreach1, "\t"); |
|
212
|
|
|
$if1 .= $this->xc->getXcXoopsTplAssign('form', '$permform->render()', true, "\t"); |
|
213
|
|
|
$if1 .= $this->xc->getXcEqualsOperator('$permFound', 'true', null, "\t"); |
|
214
|
|
|
$ret .= $this->pc->getPhpCodeConditions("'global'", ' === ', '$op', $if1, false); |
|
215
|
|
|
|
|
216
|
|
|
foreach (\array_keys($tables) as $t) { |
|
217
|
|
|
if (1 == $tables[$t]->getVar('table_permissions')) { |
|
218
|
|
|
$tableId = $tables[$t]->getVar('table_id'); |
|
219
|
|
|
$tableMid = $tables[$t]->getVar('table_mid'); |
|
220
|
|
|
$tableName = $tables[$t]->getVar('table_name'); |
|
221
|
|
|
$fields = $this->getTableFields($tableMid, $tableId); |
|
222
|
|
|
$fieldId = 'id'; |
|
223
|
|
|
$fieldMain = 'title'; |
|
224
|
|
|
foreach (\array_keys($fields) as $f) { |
|
225
|
|
|
$fieldName = $fields[$f]->getVar('field_name'); |
|
226
|
|
|
if (0 == $f) { |
|
227
|
|
|
$fieldId = $fieldName; |
|
228
|
|
|
} |
|
229
|
|
|
if (1 == $fields[$f]->getVar('field_main')) { |
|
230
|
|
|
$fieldMain = $fieldName; |
|
231
|
|
|
} |
|
232
|
|
|
} |
|
233
|
|
|
$if_count = $this->xc->getXcHandlerAllObj($tableName, $fieldMain, 0, 0, "\t\t"); |
|
234
|
|
|
$getVar1 = $this->xc->getXcGetVar('', "{$tableName}All[\$i]", $fieldId, true); |
|
235
|
|
|
$getVar2 = $this->xc->getXcGetVar('', "{$tableName}All[\$i]", $fieldMain, true); |
|
236
|
|
|
$fe_content = $this->xc->getXcAddItem('permform', $getVar1, $getVar2, "\t\t\t"); |
|
237
|
|
|
$if_table = $this->xc->getXcHandlerCountObj($tableName, "\t"); |
|
238
|
|
|
$if_count .= $this->pc->getPhpCodeForeach("{$tableName}All", true, false, 'i', $fe_content, "\t\t"); |
|
239
|
|
|
$if_count .= $this->xc->getXcXoopsTplAssign('form', '$permform->render()', true, "\t\t"); |
|
240
|
|
|
$if_table .= $this->pc->getPhpCodeConditions("\${$tableName}Count", ' > ', '0', $if_count, false, "\t"); |
|
241
|
|
|
$if_table .= $this->xc->getXcEqualsOperator('$permFound', 'true', null, "\t"); |
|
242
|
|
|
$cond = "'approve_{$tableName}' === \$op || 'submit_{$tableName}' === \$op || 'view_{$tableName}' === \$op"; |
|
243
|
|
|
$ret .= $this->pc->getPhpCodeConditions($cond, '', '', $if_table, false); |
|
244
|
|
|
} |
|
245
|
|
|
} |
|
246
|
|
|
|
|
247
|
|
|
$ret .= $this->pc->getPhpCodeUnset('permform'); |
|
248
|
|
|
$elseInter = $this->xc->getXcRedirectHeader("'permissions.php'", '', '3', "{$language}NO_PERMISSIONS_SET", false, "\t"); |
|
249
|
|
|
$elseInter .= $this->getSimpleString("exit();", "\t"); |
|
250
|
|
|
$ret .= $this->pc->getPhpCodeConditions('$permFound', ' !== ', 'true', $elseInter, false); |
|
251
|
|
|
|
|
252
|
|
|
return $ret; |
|
253
|
|
|
} |
|
254
|
|
|
|
|
255
|
|
|
/** |
|
256
|
|
|
* @public function render |
|
257
|
|
|
* |
|
258
|
|
|
* @param null |
|
259
|
|
|
* |
|
260
|
|
|
* @return bool|string |
|
261
|
|
|
*/ |
|
262
|
|
|
public function render() |
|
263
|
|
|
{ |
|
264
|
|
|
$module = $this->getModule(); |
|
265
|
|
|
$filename = $this->getFileName(); |
|
266
|
|
|
$moduleDirname = $module->getVar('mod_dirname'); |
|
267
|
|
|
$language = $this->getLanguage($moduleDirname, 'AM'); |
|
268
|
|
|
$content = $this->getHeaderFilesComments($module); |
|
269
|
|
|
$content .= $this->getPermissionsHeader($module, $language); |
|
270
|
|
|
$content .= $this->getPermissionsSwitch($module, $language); |
|
271
|
|
|
$content .= $this->getPermissionsBody($module, $language); |
|
272
|
|
|
$content .= $this->getRequire('footer'); |
|
273
|
|
|
|
|
274
|
|
|
$this->create($moduleDirname, 'admin', $filename, $content, \_AM_MODULEBUILDER_FILE_CREATED, \_AM_MODULEBUILDER_FILE_NOTCREATED); |
|
275
|
|
|
|
|
276
|
|
|
return $this->renderFile(); |
|
277
|
|
|
} |
|
278
|
|
|
} |
|
279
|
|
|
|