| [ Index ] |
|
Code source de b2evolution 2.1.0-beta |
1 <?php 2 /** 3 * This file implements the UI view (+more :/) for the blogs permission management. 4 * 5 * b2evolution - {@link http://b2evolution.net/} 6 * Released under GNU GPL License - {@link http://b2evolution.net/about/license.html} 7 * @copyright (c)2003-2007 by Francois PLANQUE - {@link http://fplanque.net/} 8 * 9 * @package admin 10 * 11 * @todo move user rights queries to object (fplanque) 12 * 13 * @version $Id: _coll_group_perm.form.php,v 1.2 2007/09/22 21:56:40 fplanque Exp $ 14 */ 15 if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' ); 16 17 /** 18 * @var Blog 19 */ 20 global $edited_Blog; 21 /** 22 * @var User 23 */ 24 global $current_User; 25 26 global $debug; 27 global $UserSettings; 28 global $rsc_url, $htsrv_url; 29 30 global $Blog, $permission_to_change_admin; 31 32 $permission_to_change_admin = $current_User->check_perm( 'blog_admin', 'edit', false, $Blog->ID ); 33 34 $layout = $UserSettings->param_Request( 'layout', 'blogperms_layout', 'string', 'default' ); // table layout mode 35 36 // Javascript: 37 echo ' 38 <script type="text/javascript">var htsrv_url = "'.$htsrv_url.'";</script> 39 <script type="text/javascript" src="'.$rsc_url.'js/collectionperms.js"></script>'; 40 41 42 43 44 $Form = & new Form( NULL, 'blogperm_checkchanges', 'post', 'fieldset' ); 45 46 $Form->begin_form( 'fform' ); 47 48 $Form->hidden_ctrl(); 49 $Form->hidden( 'tab', 'permgroup' ); 50 $Form->hidden( 'blog', $edited_Blog->ID ); 51 $Form->hidden( 'layout', $layout ); 52 53 $Form->begin_fieldset( T_('Group permissions') ); 54 55 56 /* 57 * Query user list: 58 */ 59 if( get_param('action') == 'filter2' ) 60 { 61 $keywords = param( 'keywords2', 'string', '', true ); 62 set_param( 'keywords1', $keywords ); 63 } 64 else 65 { 66 $keywords = param( 'keywords1', 'string', '', true ); 67 set_param( 'keywords2', $keywords ); 68 } 69 70 $where_clause = ''; 71 72 if( !empty( $keywords ) ) 73 { 74 $kw_array = split( ' ', $keywords ); 75 foreach( $kw_array as $kw ) 76 { 77 $where_clause .= 'grp_name LIKE "%'.$DB->escape($kw).'%" AND '; 78 } 79 } 80 81 82 $sql = 'SELECT grp_ID, grp_name, bloggroup_perm_poststatuses, bloggroup_perm_edit, bloggroup_ismember, 83 bloggroup_perm_comments, bloggroup_perm_delpost, bloggroup_perm_cats, 84 bloggroup_perm_properties, bloggroup_perm_admin, bloggroup_perm_media_upload, 85 bloggroup_perm_media_browse, bloggroup_perm_media_change 86 FROM T_groups LEFT JOIN T_coll_group_perms ON ( 87 grp_ID = bloggroup_group_ID 88 AND bloggroup_blog_ID = '.$edited_Blog->ID.' ) 89 WHERE '.$where_clause.' 1 90 ORDER BY bloggroup_ismember DESC, *, grp_name, grp_ID'; 91 92 93 94 // Display layout selector: 95 // TODO: cancel event in switch layout (or it will trigger bozo validator) 96 echo '<div style="float:right">'; 97 echo T_('Layout').': '; 98 echo '[<a href="?ctrl=coll_settings&action=edit&tab=permgroup&blog='.$edited_Blog->ID.'&layout=default" 99 onclick="blogperms_switch_layout(\'default\'); return false;">'.T_('Simple').'</a>] '; 100 101 echo '[<a href="?ctrl=coll_settings&action=edit&tab=permgroup&blog='.$edited_Blog->ID.'&layout=wide" 102 onclick="blogperms_switch_layout(\'wide\'); return false;">'.T_('Advanced').'</a>] '; 103 104 if( $debug ) 105 { // Debug mode = both modes are displayed: 106 echo '[<a href="?ctrl=coll_settings&action=edit&tab=permgroup&blog='.$edited_Blog->ID.'&layout=all" 107 onclick="blogperms_switch_layout(\'all\'); return false;">Debug</a>] '; 108 } 109 echo '</div>'; 110 // Display wide layout: 111 ?> 112 113 <div id="userlist_wide" class="clear" style="<?php 114 echo 'display:'.( ($layout == 'wide' || $layout == 'all' ) ? 'block' : 'none' ) ?>"> 115 116 <?php 117 118 119 $Results = & new Results( $sql, 'collgroup_' ); 120 121 // Tell the Results class that we already have a form for this page: 122 $Results->Form = & $Form; 123 124 125 $Results->title = T_('Group permissions'); 126 127 128 129 /** 130 * Callback to add filters on top of the result set 131 * 132 * @param Form 133 */ 134 function filter_colluserlist( & $Form ) 135 { 136 static $count = 0; 137 138 $count++; 139 $Form->switch_layout( 'blockspan' ); 140 // TODO: javascript update other input fields (for other layouts): 141 $Form->text( 'keywords'.$count, get_param('keywords'.$count), 20, T_('Keywords'), T_('Separate with space'), 50 ); 142 $Form->switch_layout( NULL ); // Restor previously saved 143 } 144 $Results->filter_area = array( 145 'submit' => 'actionArray[filter1]', 146 'callback' => 'filter_colluserlist', 147 'url_ignore' => 'results_colluser_page,keywords1,keywords2', 148 'presets' => array( 149 'all' => array( T_('All users'), regenerate_url( 'action,results_colluser_page,keywords1,keywords2', 'action=edit' ) ), 150 ) 151 ); 152 153 154 155 /* 156 * Grouping params: 157 */ 158 $Results->group_by = 'bloggroup_ismember'; 159 $Results->ID_col = 'grp_ID'; 160 161 162 /* 163 * Group columns: 164 */ 165 $Results->grp_cols[] = array( 166 'td_colspan' => 0, // nb_cols 167 'td' => '¤conditional( #bloggroup_ismember#, \''.TS_('Members').'\', \''.TS_('Non members').'\' )¤', 168 ); 169 170 171 /* 172 * Colmun definitions: 173 */ 174 $Results->cols[] = array( 175 'th' => T_('Group'), 176 'order' => 'grp_name', 177 'td' => '<a href="?ctrl=users&grp_ID=$grp_ID$">$grp_name$</a>', 178 ); 179 180 181 function coll_perm_checkbox( $row, $perm, $title, $id = NULL ) 182 { 183 global $permission_to_change_admin; 184 185 $r = '<input type="checkbox"'; 186 if( !empty($id) ) 187 { 188 $r .= ' id="'.$id.'"'; 189 } 190 $r .= ' name="blog_'.$perm.'_'.$row->grp_ID.'"'; 191 if( !empty( $row->{'bloggroup_'.$perm} ) ) 192 { 193 $r .= ' checked="checked"'; 194 } 195 if( ! $permission_to_change_admin 196 && ($row->bloggroup_perm_admin || $perm == 'perm_admin' ) ) 197 { // No permission to touch nOR create admins 198 $r .= ' disabled="disabled"'; 199 } 200 $r .= ' onclick="merge_from_wide( this, '.$row->grp_ID.' );" class="checkbox" 201 value="1" title="'.$title.'" />'; 202 return $r; 203 } 204 205 function coll_perm_status_checkbox( $row, $perm_status, $title ) 206 { 207 global $permission_to_change_admin; 208 209 if( ! isset( $row->statuses_array ) ) 210 { // NOTE: we are writing directly into the DB result array here, it's a little harsh :/ 211 // TODO: make all these perms booleans in the DB: 212 $row->statuses_array = isset($row->bloggroup_perm_poststatuses) 213 ? explode( ',', $row->bloggroup_perm_poststatuses ) 214 : array(); 215 } 216 217 // pre_dump($row->statuses_array); 218 219 $r = '<input type="checkbox"'; 220 if( !empty($id) ) 221 { 222 $r .= ' id="'.$id.'"'; 223 } 224 $r .= ' name="blog_perm_'.$perm_status.'_'.$row->grp_ID.'"'; 225 if( in_array($perm_status, $row->statuses_array) ) 226 { 227 $r .= ' checked="checked"'; 228 } 229 if( ! $permission_to_change_admin && $row->bloggroup_perm_admin ) 230 { 231 $r .= ' disabled="disabled"'; 232 } 233 $r .= ' onclick="merge_from_wide( this, '.$row->grp_ID.' );" class="checkbox" 234 value="1" title="'.$title.'" />'; 235 return $r; 236 } 237 238 $Results->cols[] = array( 239 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Is<br />member'), 240 'th_class' => 'checkright', 241 'td' => '%coll_perm_checkbox( {row}, \'ismember\', \''.TS_('Permission to read protected posts').'\', \'checkallspan_state_$grp_ID$\' )%', 242 'td_class' => 'center', 243 ); 244 245 $Results->cols[] = array( 246 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 247 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Publ'), 248 'th_class' => 'checkright', 249 'td' => '%coll_perm_status_checkbox( {row}, \'published\', \''.TS_('Permission to read protected posts').'\' )%', 250 'td_class' => 'center', 251 ); 252 $Results->cols[] = array( 253 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 254 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Prot'), 255 'th_class' => 'checkright', 256 'td' => '%coll_perm_status_checkbox( {row}, \'protected\', \''.TS_('Permission to post into this blog with protected status').'\' )%', 257 'td_class' => 'center', 258 ); 259 $Results->cols[] = array( 260 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 261 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Priv'), 262 'th_class' => 'checkright', 263 'td' => '%coll_perm_status_checkbox( {row}, \'private\', \''.TS_('Permission to post into this blog with private status').'\' )%', 264 'td_class' => 'center', 265 ); 266 $Results->cols[] = array( 267 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 268 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Drft'), 269 'th_class' => 'checkright', 270 'td' => '%coll_perm_status_checkbox( {row}, \'draft\', \''.TS_('Permission to post into this blog with draft status').'\' )%', 271 'td_class' => 'center', 272 ); 273 $Results->cols[] = array( 274 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 275 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Depr'), 276 'th_class' => 'checkright', 277 'td' => '%coll_perm_status_checkbox( {row}, \'deprecated\', \''.TS_('Permission to post into this blog with deprecated status').'\' )%', 278 'td_class' => 'center', 279 ); 280 281 $Results->cols[] = array( 282 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Can post/edit with following statuses:'), 283 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Redr'), 284 'th_class' => 'checkright', 285 'td' => '%coll_perm_status_checkbox( {row}, \'redirected\', \''.TS_('Permission to post into this blog with redirected status').'\' )%', 286 'td_class' => 'center', 287 ); 288 289 function coll_perm_edit( $row ) 290 { 291 global $permission_to_change_admin; 292 293 $r = '<select id="blog_perm_edit_'.$row->grp_ID.'" name="blog_perm_edit_'.$row->grp_ID.'" 294 onclick="merge_from_wide( this, '.$row->grp_ID.' );"'; 295 if( ! $permission_to_change_admin && $row->bloggroup_perm_admin ) 296 { 297 $r .= ' disabled="disabled"'; 298 } 299 $r .= ' >'; 300 $r .= '<option value="no" '.( $row->bloggroup_perm_edit == 'no' ? 'selected="selected"' : '' ).'>No editing</option>'; 301 $r .= '<option value="own" '.( $row->bloggroup_perm_edit == 'own' ? 'selected="selected"' : '' ).'>Own posts</option>'; 302 $r .= '<option value="lt" '.( $row->bloggroup_perm_edit == 'lt' ? 'selected="selected"' : '' ).'>< own level</option>'; 303 $r .= '<option value="le" '.( $row->bloggroup_perm_edit == 'le' ? 'selected="selected"' : '' ).'>≤ own level</option>'; 304 $r .= '<option value="all" '.( $row->bloggroup_perm_edit == 'all' ? 'selected="selected"' : '' ).'>All posts</option>'; 305 $r .= '</select>'; 306 return $r; 307 } 308 $Results->cols[] = array( 309 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Edit posts<br />/user level'), 310 'th_class' => 'checkright', 311 'default_dir' => 'D', 312 'td' => '%coll_perm_edit( {row} )%', 313 'td_class' => 'center', 314 ); 315 316 317 $Results->cols[] = array( 318 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Delete<br />posts'), 319 'th_class' => 'checkright', 320 'order' => 'bloggroup_perm_delpost', 321 'default_dir' => 'D', 322 'td' => '%coll_perm_checkbox( {row}, \'perm_delpost\', \''.TS_('Permission to delete posts in this blog').'\' )%', 323 'td_class' => 'center', 324 ); 325 326 $Results->cols[] = array( 327 'th' => /* TRANS: SHORT table header on TWO lines */ T_('Edit<br />comts'), 328 'th_class' => 'checkright', 329 'order' => 'bloggroup_perm_comments', 330 'default_dir' => 'D', 331 'td' => '%coll_perm_checkbox( {row}, \'perm_comments\', \''.TS_('Permission to edit comments in this blog').'\' )%', 332 'td_class' => 'center', 333 ); 334 335 $Results->cols[] = array( 336 'th_group' => T_('Edit blog settings'), 337 'th' => T_('Cats'), 338 'th_class' => 'checkright', 339 'order' => 'bloggroup_perm_cats', 340 'default_dir' => 'D', 341 'td' => '%coll_perm_checkbox( {row}, \'perm_cats\', \''.TS_('Permission to edit categories for this blog').'\' )%', 342 'td_class' => 'center', 343 ); 344 345 $Results->cols[] = array( 346 'th_group' => T_('Edit blog settings'), 347 'th' => /* TRANS: Short for blog features */ T_('Feat.'), 348 'th_class' => 'checkright', 349 'order' => 'bloggroup_perm_properties', 350 'default_dir' => 'D', 351 'td' => '%coll_perm_checkbox( {row}, \'perm_properties\', \''.TS_('Permission to edit blog features').'\' )%', 352 'td_class' => 'center', 353 ); 354 355 $Results->cols[] = array( 356 'th_group' => T_('Edit blog settings'), 357 'th' => /* TRANS: Short for advanced */ T_('Adv.'), 358 'th_class' => 'checkright', 359 'order' => 'bloggroup_perm_admin', 360 'default_dir' => 'D', 361 'td' => '%coll_perm_checkbox( {row}, \'perm_admin\', \''.TS_('Permission to edit advanced/administrative blog properties').'\' )%', 362 'td_class' => 'center', 363 ); 364 365 // Media Directory: 366 $Results->cols[] = array( 367 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Media directory'), 368 'th' => T_('Upload'), 369 'th_class' => 'checkright', 370 'order' => 'bloggroup_perm_media_upload', 371 'default_dir' => 'D', 372 'td' => '%coll_perm_checkbox( {row}, \'perm_media_upload\', \''.TS_('Permission to upload into blog\'s media folder').'\' )%', 373 'td_class' => 'center', 374 ); 375 $Results->cols[] = array( 376 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Media directory'), 377 'th' => T_('Read'), 378 'th_class' => 'checkright', 379 'order' => 'bloggroup_perm_media_browse', 380 'default_dir' => 'D', 381 'td' => '%coll_perm_checkbox( {row}, \'perm_media_browse\', \''.TS_('Permission to browse blog\'s media folder').'\' )%', 382 'td_class' => 'center', 383 ); 384 $Results->cols[] = array( 385 'th_group' => /* TRANS: SHORT table header on TWO lines */ T_('Media directory'), 386 'th' => T_('Write'), 387 'th_class' => 'checkright', 388 'order' => 'bloggroup_perm_media_change', 389 'default_dir' => 'D', 390 'td' => '%coll_perm_checkbox( {row}, \'perm_media_change\', \''.TS_('Permission to change the blog\'s media folder content').'\' )%', 391 'td_class' => 'center', 392 ); 393 394 function perm_check_all( $row ) 395 { 396 global $permission_to_change_admin; 397 398 if( ! $permission_to_change_admin && $row->bloggroup_perm_admin ) 399 { 400 return ' '; 401 } 402 403 return '<a href="javascript:toggleall_wide(document.getElementById(\'blogperm_checkchanges\'), '.$row->grp_ID.' );merge_from_wide( document.getElementById(\'blogperm_checkchanges\'), '.$row->grp_ID.' ); setcheckallspan('.$row->grp_ID.');" title="'.TS_('(un)selects all checkboxes using Javascript').'"> 404 <span id="checkallspan_'.$row->grp_ID.'">'.TS_('(un)check all').'</span> 405 </a>'; 406 } 407 $Results->cols[] = array( 408 'th' => ' ', 409 'td' => '%perm_check_all( {row} )%', 410 'td_class' => 'center', 411 ); 412 413 414 // Display WIDE: 415 $Results->display(); 416 417 echo '</div>'; 418 419 420 // Display simple layout: 421 ?> 422 <div id="userlist_default" class="clear" style="<?php 423 echo 'display:'.( ($layout == 'default' || $layout == 'all' ) ? 'block' : 'none' ) ?>"> 424 425 <?php 426 427 428 // Change filter definitions for simple layout: 429 430 $Results->filter_area = array( 431 'submit' => 'actionArray[filter2]', 432 'callback' => 'filter_colluserlist', 433 'url_ignore' => 'action,results_colluser_page,keywords1,keywords2', 434 'presets' => array( 435 'all' => array( T_('All users'), regenerate_url( 'action,results_colluser_page,keywords1,keywords2', 'action=edit' ) ), 436 ) 437 ); 438 439 440 // Change column definitions for simple layout: 441 442 $Results->cols = array(); // RESET! 443 444 $Results->cols[] = array( 445 'th' => T_('Login'), 446 'order' => 'user_login', 447 'td' => '<a href="?ctrl=users&grp_ID=$grp_ID$">$grp_name$</a>', 448 ); 449 450 451 function simple_coll_perm_radios( $row ) 452 { 453 global $permission_to_change_admin; 454 455 $r = ''; 456 $user_easy_group = blogperms_get_easy2( $row, 'group' ); 457 foreach( array( 458 array( 'nomember', T_('Not Member') ), 459 array( 'member', T_('Member') ), 460 array( 'contrib', T_('Contributor') ), 461 array( 'editor', T_('Publisher') ), 462 array( 'moderator', T_('Moderator') ), 463 array( 'owner', T_('Owner') ), 464 array( 'admin', T_('Admin') ), 465 array( 'custom', T_('Custom') ) 466 ) as $lkey => $easy_group ) 467 { 468 $r .= '<input type="radio" id="blog_perm_easy_'.$row->grp_ID.'_'.$lkey.'" name="blog_perm_easy_'.$row->grp_ID.'" value="'.$easy_group[0].'"'; 469 if( $easy_group[0] == $user_easy_group ) 470 { 471 $r .= ' checked="checked"'; 472 } 473 if( ! $permission_to_change_admin 474 && ( $row->bloggroup_perm_admin || $easy_group[0] == 'admin' ) ) 475 { // No permission to touch nOR create admins 476 $r .= ' disabled="disabled"'; 477 } 478 $r .= ' onclick="merge_from_easy( this, '.$row->grp_ID.' )" class="radio" /> 479 <label for="blog_perm_easy_'.$row->grp_ID.'_'.$lkey.'">'.$easy_group[1].'</label> '; 480 } 481 482 return $r; 483 } 484 $Results->cols[] = array( 485 'th' => T_('Role'), 486 'td' => '%simple_coll_perm_radios( {row} )%', 487 ); 488 489 490 // Display SIMPLE: 491 $Results->display(); 492 493 494 echo '</div>'; 495 496 // Permission note: 497 // fp> TODO: link 498 echo '<p class="note center">'.T_('Note: General group permissions may further restrict any media folder permissions defined here.').'</p>'; 499 500 $Form->end_fieldset(); 501 502 503 // Make a hidden list of all displayed users: 504 $grp_IDs = array(); 505 foreach( $Results->rows as $row ) 506 { 507 $grp_IDs[] = $row->grp_ID; 508 } 509 $Form->hidden( 'group_IDs', implode( ',', $grp_IDs) ); 510 511 $Form->end_form( array( array( 'submit', 'actionArray[update]', T_('Update'), 'SaveButton' ), 512 array( 'reset', '', T_('Reset'), 'ResetButton' ) ) ); 513 514 /* 515 * $Log: _coll_group_perm.form.php,v $ 516 * Revision 1.2 2007/09/22 21:56:40 fplanque 517 * fixed links 518 * 519 * Revision 1.1 2007/06/25 10:59:36 fplanque 520 * MODULES (refactored MVC) 521 * 522 * Revision 1.18 2007/06/12 23:51:16 fplanque 523 * non admins can no longer create blog admins 524 * 525 * Revision 1.17 2007/06/12 23:16:04 fplanque 526 * non admins can no longer change admin blog perms 527 * 528 * Revision 1.16 2007/06/03 02:54:18 fplanque 529 * Stuff for permission maniacs (admin part only, actual perms checks to be implemented) 530 * Newbies will not see this complexity since advanced perms are now disabled by default. 531 * 532 * Revision 1.15 2007/05/29 01:17:20 fplanque 533 * advanced admin blog settings are now restricted by a special permission 534 * 535 * Revision 1.14 2007/04/26 00:11:05 fplanque 536 * (c) 2007 537 * 538 * Revision 1.13 2007/03/11 22:48:19 fplanque 539 * handling of permission to redirect posts 540 * 541 * Revision 1.12 2007/03/11 22:30:08 fplanque 542 * cleaned up group perms 543 * 544 */ 545 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Thu Nov 29 23:58:50 2007 | par Balluche grâce à PHPXref 0.7 |
|