1
|
<?php
|
2
|
/**
|
3
|
*
|
4
|
* @category admin
|
5
|
* @package start
|
6
|
* @author Ryan Djurovich, WebsiteBaker Project
|
7
|
* @copyright 2009-2013, WebsiteBaker Org. e.V.
|
8
|
* @link http://www.websitebaker.org/
|
9
|
* @license http://www.gnu.org/licenses/gpl.html
|
10
|
* @platform WebsiteBaker 2.8.x
|
11
|
* @requirements PHP 5.2.2 and higher
|
12
|
* @version $Id: upgradePermissions.php 1907 2013-06-07 02:30:42Z Luisehahne $
|
13
|
* @filesource $HeadURL: svn://isteam.dynxs.de/wb-archiv/branches/2.8.x/wb/admin/groups/upgradePermissions.php $
|
14
|
* @lastmodified $Date: 2013-06-07 04:30:42 +0200 (Fri, 07 Jun 2013) $
|
15
|
*
|
16
|
*/
|
17
|
|
18
|
/* -------------------------------------------------------- */
|
19
|
// Must include code to stop this file being accessed directly
|
20
|
if(!defined('WB_URL')) {
|
21
|
require_once(dirname(dirname(dirname(__FILE__))).'/framework/globalExceptionHandler.php');
|
22
|
throw new IllegalFileException();
|
23
|
}
|
24
|
/* -------------------------------------------------------- */
|
25
|
|
26
|
/**
|
27
|
*
|
28
|
*
|
29
|
* @access public getSystemDefaultPermissions()
|
30
|
* @param none
|
31
|
* @return array System Default Permissions
|
32
|
*
|
33
|
*/
|
34
|
function getSystemDefaultPermissions ()
|
35
|
{
|
36
|
$retVal = array(
|
37
|
'access' => 0,
|
38
|
'addons' => 0,
|
39
|
'admintools' => 0,
|
40
|
'admintools_view' => 0,
|
41
|
'groups' => 0,
|
42
|
'groups_add' => 0,
|
43
|
'groups_delete' => 0,
|
44
|
'groups_modify' => 0,
|
45
|
'groups_view' => 0,
|
46
|
'languages' => 0,
|
47
|
'languages_install' => 0,
|
48
|
'languages_uninstall' => 0,
|
49
|
'languages_view' => 0,
|
50
|
'media' => 0,
|
51
|
'media_create' => 0,
|
52
|
'media_delete' => 0,
|
53
|
'media_rename' => 0,
|
54
|
'media_upload' => 0,
|
55
|
'media_view' => 0,
|
56
|
'modules' => 0,
|
57
|
'modules_install' => 0,
|
58
|
'modules_uninstall' => 0,
|
59
|
'modules_view' => 0,
|
60
|
'modules_advanced' => 0,
|
61
|
'pages' => 0,
|
62
|
'pages_add' => 0,
|
63
|
'pages_add_l0' => 0,
|
64
|
'pages_delete' => 0,
|
65
|
'pages_intro' => 0,
|
66
|
'pages_modify' => 0,
|
67
|
'pages_settings' => 0,
|
68
|
'pages_view' => 0,
|
69
|
'preferences' => 1,
|
70
|
'preferences_view' => 1,
|
71
|
'settings' => 0,
|
72
|
'settings_basic' => 0,
|
73
|
'settings_advanced' => 0,
|
74
|
'settings_view' => 0,
|
75
|
'templates' => 0,
|
76
|
'templates_install' => 0,
|
77
|
'templates_uninstall' => 0,
|
78
|
'templates_view' => 0,
|
79
|
'users' => 0,
|
80
|
'users_add' => 0,
|
81
|
'users_delete' => 0,
|
82
|
'users_modify' => 0,
|
83
|
'users_view' => 0
|
84
|
);
|
85
|
return $retVal;
|
86
|
}
|
87
|
|
88
|
/* *****************************************************************************
|
89
|
* Prepare $module_permissions for workout
|
90
|
* @access public
|
91
|
* @param object $admin: admin-object
|
92
|
* @return array:
|
93
|
*/
|
94
|
function set_module_permissions ($admin)
|
95
|
{
|
96
|
// Get template permissions
|
97
|
$modules = array('');
|
98
|
$dirs = scan_current_dir(WB_PATH.'/modules');
|
99
|
|
100
|
if(is_array($admin->get_post('module_permissions')))
|
101
|
{
|
102
|
$modules = $admin->get_post('module_permissions');
|
103
|
}
|
104
|
// foldername validation
|
105
|
array_walk($dirs['path'],'check_dir' );
|
106
|
// delete empty items
|
107
|
foreach($dirs['path'] AS $key=>$val) {
|
108
|
if(empty($dirs['path'][$key])) { unset($dirs['path'][$key]); }
|
109
|
}
|
110
|
// list of unckecked modules directories
|
111
|
$modules = array_diff ( $dirs['path'], $modules );
|
112
|
// reindex
|
113
|
$modules = array_merge($modules);
|
114
|
return $modules;
|
115
|
}
|
116
|
|
117
|
/* *****************************************************************************
|
118
|
* Prepare $template_permissions for workout
|
119
|
* @access public
|
120
|
* @param object $admin: admin-object
|
121
|
* @return array:
|
122
|
*/
|
123
|
function set_template_permissions ($admin)
|
124
|
{
|
125
|
// Get template permissions
|
126
|
$templates = array();
|
127
|
$dirs = scan_current_dir(WB_PATH.'/templates');
|
128
|
if(is_array($admin->get_post('template_permissions')))
|
129
|
{
|
130
|
foreach($admin->get_post('template_permissions') AS $selected_name)
|
131
|
{
|
132
|
if( file_exists( WB_PATH.'/templates/'.$selected_name.'/info.php') && in_array ($selected_name, $dirs['path']) )
|
133
|
{
|
134
|
$templates[] = $selected_name;
|
135
|
}
|
136
|
}
|
137
|
}
|
138
|
$templates = (sizeof($templates) > 0) ? array_diff($dirs['path'], $templates) : $dirs['path'];
|
139
|
// return $template_permissions = implode(',', $templates);
|
140
|
return $templates;
|
141
|
}
|
142
|
|
143
|
/* *****************************************************************************
|
144
|
* Prepare $system_permissions for save
|
145
|
* @access public
|
146
|
* @param
|
147
|
* @return string: parsed HTML-content
|
148
|
*/
|
149
|
function set_system_permissions ($system_permissions = array())
|
150
|
{
|
151
|
// Implode system permissions
|
152
|
$imploded_system_permissions = '';
|
153
|
$system_permissions = !is_array($system_permissions) ? array() : $system_permissions;
|
154
|
foreach($system_permissions AS $key => $value)
|
155
|
{
|
156
|
if($value == true)
|
157
|
{
|
158
|
if($imploded_system_permissions == '')
|
159
|
{
|
160
|
$imploded_system_permissions = $key;
|
161
|
} else {
|
162
|
$imploded_system_permissions .= ','.$key;
|
163
|
}
|
164
|
}
|
165
|
}
|
166
|
return $imploded_system_permissions;
|
167
|
}
|
168
|
|
169
|
/* *****************************************************************************
|
170
|
* array_walk callback functions
|
171
|
*/
|
172
|
|
173
|
if(!function_exists('check_dir'))
|
174
|
{
|
175
|
function check_dir(&$val, $key ) {
|
176
|
$RetVal = null;
|
177
|
$aArray[$key] = $val;
|
178
|
$RetVal = array_slice ($aArray,!preg_match('/^[a-z]{1}[a-z][a-z_\-0-9]{2,}$/i', $val ));
|
179
|
$RetVal = each ($RetVal);
|
180
|
$val = $RetVal['value'];
|
181
|
}
|
182
|
}
|
183
|
|
184
|
|
185
|
if(!function_exists('remove_underline')){
|
186
|
function remove_underline(& $val, $key, $vars = array())
|
187
|
{
|
188
|
$val = rtrim($val, ',');
|
189
|
$vars = explode ( '_', $val);
|
190
|
$val = $vars[0];
|
191
|
}
|
192
|
}
|
193
|
|
194
|
if(!function_exists('addons')){
|
195
|
function addons(& $val, $key, $vars = '')
|
196
|
{
|
197
|
$val = rtrim($val, '_');
|
198
|
$val = ($val == 'modules_view') || ($val == 'templates_view') || ($val == 'languages_view') ? 'addons' : $val;
|
199
|
}
|
200
|
}
|
201
|
|
202
|
if(!function_exists('settings')){
|
203
|
function settings(& $val, $key, $vars = '')
|
204
|
{
|
205
|
$val = ($val == 'settings_view') ? 'settings_basic' : $val;
|
206
|
// $val = ($val == 'settings_basic') || ($val == 'settings_advanced') ? 'settings_view' : $val1;
|
207
|
}
|
208
|
}
|
209
|
|
210
|
if(!function_exists('access')){
|
211
|
function access(& $val, $key, $vars = '')
|
212
|
{
|
213
|
$val = ($val == 'groups_view') || ($val == 'users_view') ? 'access' : $val;
|
214
|
}
|
215
|
}
|
216
|
function convertArrayToString ($val=null)
|
217
|
{
|
218
|
$settings = '';
|
219
|
if(is_array($val))
|
220
|
{
|
221
|
foreach( $val as $key => $value )
|
222
|
{
|
223
|
$settings .= trim($value.',','\'');
|
224
|
}
|
225
|
} else {
|
226
|
$settings = $val;
|
227
|
}
|
228
|
return trim($settings,',');
|
229
|
}
|
230
|
|
231
|
function convertKeyArrayToString ($val=null)
|
232
|
{
|
233
|
$settings = '';
|
234
|
if(is_array($val))
|
235
|
{
|
236
|
foreach( $val as $key => $value )
|
237
|
{
|
238
|
$settings .= trim($key.',','\'');
|
239
|
}
|
240
|
} else {
|
241
|
$settings = $val;
|
242
|
}
|
243
|
return trim($settings,',');
|
244
|
}
|
245
|
|
246
|
// ---------------------------------------
|
247
|
function convertStringToArray ($val=null)
|
248
|
{
|
249
|
$array = array();
|
250
|
$settings = '';
|
251
|
if(!is_array($val)){
|
252
|
$settings = explode(',', $val);
|
253
|
foreach( $settings as $value )
|
254
|
{
|
255
|
$array[] = $value;
|
256
|
}
|
257
|
} else {
|
258
|
$array = $val;
|
259
|
}
|
260
|
return $array;
|
261
|
}
|
262
|
// ---------------------------------------
|
263
|
function convertStringToKeyArray ($val=null)
|
264
|
{
|
265
|
$array = array();
|
266
|
if(!is_array($val)){
|
267
|
$settings = explode(',', $val);
|
268
|
foreach( $settings as $value )
|
269
|
{
|
270
|
$array[$value] = 1;
|
271
|
}
|
272
|
} else {
|
273
|
$array = $val;
|
274
|
}
|
275
|
return $array;
|
276
|
}
|
277
|
|
278
|
// ---------------------------------------
|
279
|
// workout to upgrade the groups system_permissions
|
280
|
/**
|
281
|
* get_system_permissions()
|
282
|
*
|
283
|
* @return
|
284
|
*/
|
285
|
function get_system_permissions ($admin, $SystemPermissions = null )
|
286
|
{
|
287
|
$retVal = null;
|
288
|
$aValidAll = array();
|
289
|
$aValidView = array();
|
290
|
$aValidBlock = array();
|
291
|
$aValidAddons = array();
|
292
|
$aValidAccess = array();
|
293
|
$aValidSettings = array();
|
294
|
$aPermissions = array();
|
295
|
$sValueType = '';
|
296
|
$sTempPermissions = '';
|
297
|
if($SystemPermissions==null) { return false; }
|
298
|
|
299
|
// be sure is the right string for working inside
|
300
|
if(is_string($SystemPermissions)) {
|
301
|
$SystemPermissions = convertStringToKeyArray($SystemPermissions);
|
302
|
}
|
303
|
if(is_array($SystemPermissions)&& sizeof($SystemPermissions)>0) {
|
304
|
$aPermissions = convertStringToKeyArray($SystemPermissions);
|
305
|
$sTempPermissions = convertKeyArrayToString($aPermissions).',';
|
306
|
}
|
307
|
// workout setting preferences
|
308
|
if($admin->is_group_match('preferences_view',$sTempPermissions))
|
309
|
{
|
310
|
$aPermissions[] = 'preferences';
|
311
|
$sTempPermissions .= 'preferences,';
|
312
|
}
|
313
|
// workout setting admintools
|
314
|
if($admin->is_group_match('admintools_view',$sTempPermissions))
|
315
|
{
|
316
|
$aPermissions[] = 'admintools';
|
317
|
$sTempPermissions .= 'admintools,';
|
318
|
}
|
319
|
// search all data with *_view, if not found delete the permission block
|
320
|
$patternView = '/[a-z]+_view/i';
|
321
|
if(preg_match_all($patternView, $sTempPermissions, $array ))
|
322
|
{
|
323
|
// build new Permissions kist, remove invaild entries, needed to disable checknoxes
|
324
|
array_walk($array[0], 'remove_underline');
|
325
|
$sValueType = array_unique($array[0]);
|
326
|
foreach($sValueType as $key => $view )
|
327
|
{
|
328
|
//build new permission string
|
329
|
$regex = "/(($view)[a-z_0-9]*)\,/i";
|
330
|
preg_match_all ($regex, $sTempPermissions, $aMatch);
|
331
|
$aValidBlock = $aMatch[1];
|
332
|
$aValidAll = array_merge($aValidAll,$aValidBlock);
|
333
|
}
|
334
|
// set all missing/needed entries
|
335
|
$aValidAddons = $aValidAll;
|
336
|
$aValidAccess = $aValidAll;
|
337
|
$aValidSettings = $aValidAll;
|
338
|
array_walk($aValidAddons, 'addons');
|
339
|
array_walk($aValidAccess, 'access');
|
340
|
array_walk($aValidSettings, 'settings');
|
341
|
// merge all arays and set to POST ready for save and change to advanced modus
|
342
|
$aSystem = array_merge_recursive( $sValueType, $aValidAll, $aValidBlock, $aValidSettings, $aValidAddons, $aValidAccess);
|
343
|
$retVal = array_unique($aSystem);
|
344
|
natsort($retVal);
|
345
|
// set correct index key
|
346
|
$retVal = array_merge($retVal);
|
347
|
// convert to right format
|
348
|
$retVal = array_fill_keys($retVal, 1);
|
349
|
}
|
350
|
|
351
|
$_POST['system_permissions'] = $retVal;
|
352
|
return $retVal;
|
353
|
}
|
354
|
// ---------------------------------------
|
355
|
//print '<pre style="text-align: left;"><strong>function '.__FUNCTION__.'( '.''.' );</strong> basename: '.basename(__FILE__).' line: '.__LINE__.' -> <br />';
|
356
|
//print_r( $_POST ); print '</pre>';
|
357
|
|
358
|
/**
|
359
|
* setSystemCheckboxes()
|
360
|
*
|
361
|
* @param mixed $tpl
|
362
|
* @param mixed $permissions
|
363
|
* @return
|
364
|
*/
|
365
|
function setSystemCheckboxes( &$tpl, $admin, $permissions = null )
|
366
|
{
|
367
|
$array = array();
|
368
|
$aSytemArray = getSystemDefaultPermissions();
|
369
|
if(!is_array($permissions))
|
370
|
{
|
371
|
$array = convertStringToKeyArray($permissions);
|
372
|
} else {
|
373
|
$array = $permissions;
|
374
|
}
|
375
|
|
376
|
if ( true == (isset( $_POST['advanced_action']) && (( $_POST['advanced_action'] == 'no') || strpos( $_POST['advanced_action'], ">>") > 0 ) ) )
|
377
|
{
|
378
|
// set adbanced modus
|
379
|
$tpl->parse('hidden_advanced_permission_list', '', true);
|
380
|
$array = !is_array($array) ? array() : $array;
|
381
|
$aPermissions = isset($_POST['system_permissions']) ? $_POST['system_permissions'] : array();
|
382
|
foreach($array AS $key => $value)
|
383
|
{
|
384
|
// if(strpos($key,'_view')) { continue; }
|
385
|
$checked='';
|
386
|
if(array_key_exists($key, $aPermissions)) {
|
387
|
continue;
|
388
|
}
|
389
|
$tpl->set_var('SYS_NAME', "system_permissions[$key]" );
|
390
|
$tpl->set_var('SYS_VALUE', 1 );
|
391
|
$tpl->parse('hidden_advanced_permission_list', 'show_cmd_hidden_advanced_permission_list_block', true);
|
392
|
}
|
393
|
|
394
|
} else {
|
395
|
// set basic modus
|
396
|
$tpl->set_var('SYS_NAME', "none" );
|
397
|
$tpl->set_var('SYS_VALUE', '' );
|
398
|
$tpl->parse('hidden_permission_list', 'show_cmd_hidden_permission_list_block', true);
|
399
|
$array = !is_array($array) ? array() : $array;
|
400
|
foreach($array AS $key => $value)
|
401
|
{
|
402
|
$checked='';
|
403
|
if(strpos($key,'_view')) {
|
404
|
continue;
|
405
|
}
|
406
|
$tpl->set_var('SYS_NAME', "system_permissions[$key]" );
|
407
|
$tpl->set_var('SYS_VALUE', 1 );
|
408
|
$tpl->parse('hidden_permission_list', 'show_cmd_hidden_permission_list_block', true);
|
409
|
}
|
410
|
}
|
411
|
reset($array);
|
412
|
// set checked
|
413
|
foreach($array AS $key => $value)
|
414
|
{
|
415
|
$checked='';
|
416
|
if( $key != '' )
|
417
|
{
|
418
|
$checked = 'checked="checked"';
|
419
|
}
|
420
|
$tpl->set_var('VALUE', 1);
|
421
|
$tpl->set_var(($key.'_checked'), $checked);
|
422
|
}
|
423
|
|
424
|
// clean html
|
425
|
$result = array_diff_key($aSytemArray, $array);
|
426
|
foreach($result AS $key => $value)
|
427
|
{
|
428
|
$tpl->set_var('VALUE', 1);
|
429
|
$tpl->set_var(($key.'_checked'), '');
|
430
|
}
|
431
|
|
432
|
return $array;
|
433
|
}
|
434
|
|
435
|
/**
|
436
|
* upgrade_group_system_permissions()
|
437
|
*
|
438
|
* @return void
|
439
|
*/
|
440
|
function upgrade_group_system_permissions ( )
|
441
|
{
|
442
|
global $admin;
|
443
|
$database = WbDatabase::getInstance();
|
444
|
$aGroups = array();
|
445
|
$sTempPermissions = '';
|
446
|
$aTempPermissions = array();
|
447
|
$aAllowedPermissions = array(
|
448
|
'admintools','groups','languages','media','modules','pages','preferences','settings','templates','users'
|
449
|
);
|
450
|
$aPermissions = $aMatches = array();
|
451
|
$sql = 'SELECT `group_id`,`name`,`system_permissions` FROM `'.TABLE_PREFIX.'groups` ';
|
452
|
// $sql .= 'WHERE `group_id` != 1 ';
|
453
|
$sql .= 'ORDER BY `group_id` ';
|
454
|
if($oRes = $database->query($sql) )
|
455
|
{
|
456
|
while( $aPage = $oRes->fetchRow(MYSQL_ASSOC) )
|
457
|
{
|
458
|
$sTempPermissions = convertKeyArrayToString (getSystemDefaultPermissions()).',';
|
459
|
$sPermissions = $aPage['group_id']!= 1 ? $aPage['system_permissions'].',' : $sTempPermissions;
|
460
|
// check if old groups system_permissions format, there was no prferences
|
461
|
if( !preg_match_all( '/(preferences[a-z_0-9]*)\,/iU', $sPermissions, $aMatches) )
|
462
|
{
|
463
|
// fetch all known permission entries to set the permission_view
|
464
|
foreach($aAllowedPermissions as $PermissionFound)
|
465
|
{
|
466
|
$aMatches = array();
|
467
|
if( preg_match_all( "/(($PermissionFound)[a-z_0-9]*)\,/i", $sPermissions, $aMatches) )
|
468
|
{
|
469
|
$val1 = $admin->is_group_match("$PermissionFound".'_view',$sPermissions);
|
470
|
$val2 = $admin->is_group_match("$PermissionFound",$sPermissions);
|
471
|
if(!$val1 && $val2)
|
472
|
{
|
473
|
$sPermissions .= $PermissionFound.'_view,';
|
474
|
}
|
475
|
}
|
476
|
$aTempPermissions = explode(',',$sPermissions);
|
477
|
if(!$admin->is_group_match('preferences_view',$sPermissions))
|
478
|
{
|
479
|
$sPermissions .= 'preferences,preferences_view,';
|
480
|
}
|
481
|
}
|
482
|
}
|
483
|
// upgrade all groups system permission
|
484
|
$aTempPermissions = convertStringToArray(trim($sPermissions,','));
|
485
|
natsort($aTempPermissions);
|
486
|
// reindex
|
487
|
$aTempPermissions = array_merge(($aTempPermissions));
|
488
|
$retVal = array_fill_keys($aTempPermissions, 1);
|
489
|
$aPermissions[$aPage['name']] = get_system_permissions($admin, $retVal);
|
490
|
$aGroups[$aPage['name']] = convertKeyArrayToString($aPermissions[$aPage['name']]);
|
491
|
// and update DB
|
492
|
$sql = 'UPDATE `'.TABLE_PREFIX.'groups` SET ';
|
493
|
$sql .= '`system_permissions` =\''.$aGroups[$aPage['name']].'\' ';
|
494
|
$sql .= 'WHERE `name` = \''.$aPage['name'].'\' ';
|
495
|
if(!$database->query($sql) )
|
496
|
{
|
497
|
}
|
498
|
}
|
499
|
}
|
500
|
return !$database->is_error();
|
501
|
}
|