[ Index ] |
|
Code source de b2evolution 2.1.0-beta |
1 <?php 2 /** 3 * This file implements Blog handling functions. 4 * 5 * This file is part of the evoCore framework - {@link http://evocore.net/} 6 * See also {@link http://sourceforge.net/projects/evocms/}. 7 * 8 * @copyright (c)2003-2007 by Francois PLANQUE - {@link http://fplanque.net/} 9 * Parts of this file are copyright (c)2004-2006 by Daniel HAHLER - {@link http://thequod.de/contact}. 10 * 11 * {@internal License choice 12 * - If you have received this file as part of a package, please find the license.txt file in 13 * the same folder or the closest folder above for complete license terms. 14 * - If you have received this file individually (e-g: from http://evocms.cvs.sourceforge.net/) 15 * then you must choose one of the following licenses before using the file: 16 * - GNU General Public License 2 (GPL) - http://www.opensource.org/licenses/gpl-license.php 17 * - Mozilla Public License 1.1 (MPL) - http://www.opensource.org/licenses/mozilla1.1.php 18 * }} 19 * 20 * {@internal Open Source relicensing agreement: 21 * Daniel HAHLER grants Francois PLANQUE the right to license 22 * Daniel HAHLER's contributions to this file and the b2evolution project 23 * under any OSI approved OSS license (http://www.opensource.org/licenses/). 24 * }} 25 * 26 * @package evocore 27 * 28 * {@internal Below is a list of authors who have contributed to design/coding of this file: }} 29 * @author blueyed: Daniel HAHLER. 30 * @author fplanque: Francois PLANQUE. 31 * 32 * @version $Id: _blog.funcs.php,v 1.1 2007/06/25 10:59:32 fplanque Exp $ 33 */ 34 if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' ); 35 36 37 /** 38 * Update the advanced user/group permissions for edited blog 39 * 40 * @param int Blog ID 41 * @param string 'user' or 'group' 42 */ 43 function blog_update_perms( $blog, $context = 'user' ) 44 { 45 global $DB; 46 47 /** 48 * @var User 49 */ 50 global $current_User; 51 52 if( $context == 'user' ) 53 { 54 $table = 'T_coll_user_perms'; 55 $prefix = 'bloguser_'; 56 $ID_field = 'bloguser_user_ID'; 57 } 58 else 59 { 60 $table = 'T_coll_group_perms'; 61 $prefix = 'bloggroup_'; 62 $ID_field = 'bloggroup_group_ID'; 63 } 64 65 // Get affected user/group IDs: 66 $IDs = param( $context.'_IDs', '/^[0-9]+(,[0-9]+)*$/', '' ); 67 $ID_array = explode( ',', $IDs ); 68 // pre_dump( $ID_array ); 69 70 // Can the current user touch advanced admin permissions? 71 if( ! $current_User->check_perm( 'blog_admin', 'edit', false, $blog ) ) 72 { // We have no permission to touch advanced admins! 73 // echo 'restrict'; 74 75 // Get the users/groups which are adavnced admins 76 $admins_ID_array = $DB->get_col( "SELECT {$ID_field} 77 FROM $table 78 WHERE {$ID_field} IN (".implode(',',$ID_array).") 79 AND {$prefix}blog_ID = $blog 80 AND {$prefix}perm_admin <> 0" ); 81 82 // Take the admins out of the list: 83 $ID_array = array_diff( $ID_array, $admins_ID_array ); 84 // pre_dump( $ID_array ); 85 } 86 // else echo 'adv admin'; 87 88 if( empty( $ID_array ) ) 89 { 90 return; 91 } 92 93 // Delete old perms for this blog: 94 $DB->query( "DELETE FROM $table 95 WHERE {$ID_field} IN (".implode(',',$ID_array).") 96 AND {$prefix}blog_ID = ".$blog ); 97 98 $inserted_values = array(); 99 foreach( $ID_array as $loop_ID ) 100 { // Check new permissions for each user: 101 // echo "<br/>getting perms for $ID_field : $loop_ID <br />"; 102 103 $easy_mode = param( 'blog_perm_easy_'.$loop_ID, 'string', 'nomember' ); 104 105 if( $easy_mode != 'nomember' && $easy_mode != 'custom' ) 106 { 107 $easy_perms = array( 108 'bloguser_ismember' => 0, 109 'bloguser_perm_poststatuses' => array(), 110 'bloguser_perm_delpost' => 0, 111 'bloguser_perm_comments' => 0, 112 'bloguser_perm_media_upload' => 0, 113 'bloguser_perm_media_browse' => 0, 114 'bloguser_perm_media_change' => 0, 115 'bloguser_perm_admin' => 0, 116 'bloguser_perm_properties' => 0, 117 'bloguser_perm_cats' => 0 118 ); 119 120 if( ! $current_User->check_perm( 'blog_admin', 'edit', false, $blog ) 121 && $easy_mode == 'admin' ) 122 { // We have no permission to give advanced admins perm! 123 $easy_mode = 'owner'; 124 } 125 // echo $easy_mode; 126 127 // Select option 128 switch( $easy_mode ) 129 { 130 case 'admin': 131 case 'owner': 132 $easy_perms['bloguser_perm_edit'] = 'all'; 133 break; 134 135 case 'moderator': 136 $easy_perms['bloguser_perm_edit'] = 'lt'; 137 break; 138 139 case 'editor': 140 case 'contrib': 141 $easy_perms['bloguser_perm_edit'] = 'own'; 142 break; 143 144 case 'member': 145 default: 146 $easy_perms['bloguser_perm_edit'] = 'no'; 147 break; 148 } 149 150 switch( $easy_mode ) 151 { 152 case 'admin': 153 $easy_perms['bloguser_perm_admin'] = 1; 154 155 case 'owner': 156 $easy_perms['bloguser_perm_properties'] = 1; 157 $easy_perms['bloguser_perm_cats'] = 1; 158 $easy_perms['bloguser_perm_delpost'] = 1; 159 160 case 'moderator': 161 $easy_perms['bloguser_perm_poststatuses'][] = 'redirected'; 162 $easy_perms['bloguser_perm_comments'] = 1; 163 $easy_perms['bloguser_perm_media_upload'] = 1; 164 $easy_perms['bloguser_perm_media_browse'] = 1; 165 $easy_perms['bloguser_perm_media_change'] = 1; 166 167 case 'editor': 168 $easy_perms['bloguser_perm_poststatuses'][] = 'deprecated'; 169 $easy_perms['bloguser_perm_poststatuses'][] = 'protected'; 170 $easy_perms['bloguser_perm_poststatuses'][] = 'published'; 171 172 case 'contrib': 173 $easy_perms['bloguser_perm_poststatuses'][] = 'draft'; 174 $easy_perms['bloguser_perm_poststatuses'][] = 'private'; 175 $easy_perms['bloguser_perm_media_upload'] = 1; 176 $easy_perms['bloguser_perm_media_browse'] = 1; 177 178 case 'member': 179 $easy_perms['bloguser_ismember'] = 1; 180 break; 181 182 default: 183 die( 'unhandled easy mode' ); 184 } 185 186 $easy_perms['bloguser_perm_poststatuses'] = implode( ',', $easy_perms['bloguser_perm_poststatuses'] ); 187 188 $inserted_values[] = " ( $blog, $loop_ID, ".$easy_perms['bloguser_ismember'] 189 .', '.$DB->quote($easy_perms['bloguser_perm_poststatuses']) 190 .', '.$DB->quote($easy_perms['bloguser_perm_edit']) 191 .', '.$easy_perms['bloguser_perm_delpost'].', '.$easy_perms['bloguser_perm_comments'] 192 .', '.$easy_perms['bloguser_perm_cats'].', '.$easy_perms['bloguser_perm_properties'] 193 .', '.$easy_perms['bloguser_perm_admin'] 194 .', '.$easy_perms['bloguser_perm_media_upload'].', '.$easy_perms['bloguser_perm_media_browse'] 195 .', '.$easy_perms['bloguser_perm_media_change'].' ) '; 196 } 197 else 198 { // Use checkboxes 199 $perm_post = array(); 200 201 $ismember = param( 'blog_ismember_'.$loop_ID, 'integer', 0 ); 202 203 $perm_published = param( 'blog_perm_published_'.$loop_ID, 'string', '' ); 204 if( !empty($perm_published) ) $perm_post[] = 'published'; 205 206 $perm_protected = param( 'blog_perm_protected_'.$loop_ID, 'string', '' ); 207 if( !empty($perm_protected) ) $perm_post[] = 'protected'; 208 209 $perm_private = param( 'blog_perm_private_'.$loop_ID, 'string', '' ); 210 if( !empty($perm_private) ) $perm_post[] = 'private'; 211 212 $perm_draft = param( 'blog_perm_draft_'.$loop_ID, 'string', '' ); 213 if( !empty($perm_draft) ) $perm_post[] = 'draft'; 214 215 $perm_deprecated = param( 'blog_perm_deprecated_'.$loop_ID, 'string', '' ); 216 if( !empty($perm_deprecated) ) $perm_post[] = 'deprecated'; 217 218 $perm_redirected = param( 'blog_perm_redirected_'.$loop_ID, 'string', '' ); 219 if( !empty($perm_redirected) ) $perm_post[] = 'redirected'; 220 221 $perm_edit = param( 'blog_perm_edit_'.$loop_ID, 'string', 'no' ); 222 223 $perm_delpost = param( 'blog_perm_delpost_'.$loop_ID, 'integer', 0 ); 224 $perm_comments = param( 'blog_perm_comments_'.$loop_ID, 'integer', 0 ); 225 $perm_cats = param( 'blog_perm_cats_'.$loop_ID, 'integer', 0 ); 226 $perm_properties = param( 'blog_perm_properties_'.$loop_ID, 'integer', 0 ); 227 228 if( $current_User->check_perm( 'blog_admin', 'edit', false, $blog ) ) 229 { // We have permission to give advanced admins perm! 230 $perm_admin = param( 'blog_perm_admin_'.$loop_ID, 'integer', 0 ); 231 } 232 else 233 { 234 $perm_admin = 0; 235 } 236 237 $perm_media_upload = param( 'blog_perm_media_upload_'.$loop_ID, 'integer', 0 ); 238 $perm_media_browse = param( 'blog_perm_media_browse_'.$loop_ID, 'integer', 0 ); 239 $perm_media_change = param( 'blog_perm_media_change_'.$loop_ID, 'integer', 0 ); 240 241 // Update those permissions in DB: 242 243 if( $ismember || count($perm_post) || $perm_delpost || $perm_comments || $perm_cats || $perm_properties 244 || $perm_admin || $perm_media_upload || $perm_media_browse || $perm_media_change ) 245 { // There are some permissions for this user: 246 $ismember = 1; // Must have this permission 247 248 // insert new perms: 249 $inserted_values[] = " ( $blog, $loop_ID, $ismember, ".$DB->quote(implode(',',$perm_post)).", 250 ".$DB->quote($perm_edit).", 251 $perm_delpost, $perm_comments, $perm_cats, $perm_properties, $perm_admin, 252 $perm_media_upload, $perm_media_browse, $perm_media_change )"; 253 } 254 } 255 } 256 257 // Proceed with insertions: 258 if( count( $inserted_values ) ) 259 { 260 $DB->query( "INSERT INTO $table( {$prefix}blog_ID, {$ID_field}, {$prefix}ismember, 261 {$prefix}perm_poststatuses, {$prefix}perm_edit, {$prefix}perm_delpost, {$prefix}perm_comments, 262 {$prefix}perm_cats, {$prefix}perm_properties, {$prefix}perm_admin, 263 {$prefix}perm_media_upload, {$prefix}perm_media_browse, {$prefix}perm_media_change) 264 VALUES ".implode( ',', $inserted_values ) ); 265 } 266 } 267 268 269 /** 270 * Translates an given array of permissions to an "easy group". 271 * 272 * USES OBJECT ROW 273 * 274 * - nomember 275 * - member 276 * - editor (member+edit posts+delete+edit comments+all filemanager rights) 277 * - administrator (editor+edit cats+edit blog) 278 * - custom 279 * 280 * @param array indexed, as the result row from "SELECT * FROM T_coll_user_perms" 281 * @return string one of the five groups (nomember, member, editor, admin, custom) 282 */ 283 function blogperms_get_easy2( $perms, $context = 'user' ) 284 { 285 if( !isset($perms->{'blog'.$context.'_ismember'}) ) 286 { 287 return 'nomember'; 288 } 289 290 if( !empty( $perms->{'blog'.$context.'_perm_poststatuses'} ) ) 291 { 292 $perms_post = explode( ',', $perms->{'blog'.$context.'_perm_poststatuses'} ); 293 } 294 else 295 { 296 $perms_post = array(); 297 } 298 299 $perms_contrib = (in_array( 'draft', $perms_post ) ? 1 : 0) 300 + (in_array( 'private', $perms_post ) ? 1 : 0) 301 +(int)$perms->{'blog'.$context.'_perm_media_upload'} 302 +(int)$perms->{'blog'.$context.'_perm_media_browse'}; 303 304 $perms_editor = (in_array( 'deprecated', $perms_post ) ? 1 : 0) 305 + (in_array( 'protected', $perms_post ) ? 1 : 0) 306 + (in_array( 'published', $perms_post ) ? 1 : 0); 307 308 $perms_moderator = (in_array( 'redirected', $perms_post ) ? 1 : 0) 309 +(int)$perms->{'blog'.$context.'_perm_comments'} 310 +(int)$perms->{'blog'.$context.'_perm_media_change'}; 311 312 $perms_owner = (int)$perms->{'blog'.$context.'_perm_properties'} 313 +(int)$perms->{'blog'.$context.'_perm_cats'} 314 +(int)$perms->{'blog'.$context.'_perm_delpost'}; 315 316 $perms_admin = (int)$perms->{'blog'.$context.'_perm_admin'}; 317 318 $perm_edit = $perms->{'blog'.$context.'_perm_edit'}; 319 320 // echo "<br> $perms_contrib $perms_editor $perms_moderator $perms_admin $perm_edit "; 321 322 if( $perms_contrib == 4 && $perms_editor == 3 && $perms_moderator == 3 && $perms_owner == 3 && $perms_admin == 1 && $perm_edit == 'all' ) 323 { // has full admin rights 324 return 'admin'; 325 } 326 327 if( $perms_contrib == 4 && $perms_editor == 3 && $perms_moderator == 3 && $perms_owner == 3 && $perms_admin == 0 && $perm_edit == 'all' ) 328 { // has full editor rights 329 return 'owner'; 330 } 331 332 if( $perms_contrib == 4 && $perms_editor == 3 && $perms_moderator == 3 && $perms_owner == 0 && $perms_admin == 0 && $perm_edit == 'lt' ) 333 { // moderator 334 return 'moderator'; 335 } 336 337 if( $perms_contrib == 4 && $perms_editor == 3 && $perms_moderator == 0 && $perms_owner == 0 && $perms_admin == 0 && $perm_edit == 'own' ) 338 { // publisher 339 return 'editor'; 340 } 341 342 if( $perms_contrib == 4 && $perms_editor == 0 && $perms_moderator == 0 && $perms_owner == 0 && $perms_admin == 0 && $perm_edit == 'own' ) 343 { // contributor 344 return 'contrib'; 345 } 346 347 if( $perms_contrib == 0 && $perms_editor == 0 && $perms_moderator == 0 && $perms_owner == 0 && $perms_admin == 0 && $perm_edit == 'no' ) 348 { 349 return 'member'; 350 } 351 352 return 'custom'; 353 } 354 355 356 /** 357 * Check permissions on a given blog (by ID) and autoselect an appropriate blog 358 * if necessary. 359 * 360 * For use in admin 361 * 362 * NOTE: we no longer try to set $Blog inside of the function because later global use cannot be safely guaranteed in PHP4. 363 * 364 * @param string Permission name that must be given to the {@link $current_User} object. 365 * @param string Permission level that must be given to the {@link $current_User} object. 366 * @return integer new selected blog 367 */ 368 function autoselect_blog( $permname, $permlevel = 'any' ) 369 { 370 global $blog; 371 372 /** 373 * @var User 374 */ 375 global $current_User; 376 377 $autoselected_blog = $blog; 378 379 if( $autoselected_blog ) 380 { // a blog is already selected 381 if( !$current_User->check_perm( $permname, $permlevel, false, $autoselected_blog ) ) 382 { // invalid blog 383 // echo 'current blog was invalid'; 384 $autoselected_blog = 0; 385 } 386 } 387 388 if( !$autoselected_blog ) 389 { // No blog is selected so far (or selection was invalid)... 390 // Let's try to find another one: 391 392 /** 393 * @var BlogCache 394 */ 395 $BlogCache = & get_Cache( 'BlogCache' ); 396 397 // Get first suitable blog 398 $blog_array = $BlogCache->load_user_blogs( $permname, $permlevel, $current_User->ID, 'ID', 1 ); 399 if( !empty($blog_array) ) 400 { 401 $autoselected_blog = $blog_array[0]; 402 } 403 } 404 405 return $autoselected_blog; 406 } 407 408 409 /** 410 * Check that we have received a valid blog param 411 * 412 * For use in admin 413 */ 414 function valid_blog_requested() 415 { 416 global $Blog, $Messages; 417 if( empty( $Blog ) ) 418 { // The requested blog does not exist 419 $Messages->add( T_('The requested blog does not exist (any more?)'), 'error' ); 420 return false; 421 } 422 return true; 423 } 424 425 426 /** 427 * Set working blog to a new value and memorize it in user settings if needed. 428 * 429 * For use in admin 430 * 431 * @return boolean $blog changed? 432 */ 433 function set_working_blog( $new_blog_ID ) 434 { 435 global $blog, $UserSettings; 436 437 if( $new_blog_ID == $blog ) 438 { 439 return false; 440 } 441 442 $blog = $new_blog_ID; 443 444 if( $new_blog_ID != (int)$UserSettings->get('selected_blog') ) 445 { 446 $UserSettings->set( 'selected_blog', $blog ); 447 $UserSettings->dbupdate(); 448 } 449 450 return true; 451 } 452 453 454 /* 455 * $Log: _blog.funcs.php,v $ 456 * Revision 1.1 2007/06/25 10:59:32 fplanque 457 * MODULES (refactored MVC) 458 * 459 * Revision 1.34 2007/06/18 21:12:25 fplanque 460 * (no time for trying to fix something that works) 461 * 462 * Revision 1.32 2007/06/12 23:51:16 fplanque 463 * non admins can no longer create blog admins 464 * 465 * Revision 1.31 2007/06/12 23:16:03 fplanque 466 * non admins can no longer change admin blog perms 467 * 468 * Revision 1.30 2007/06/11 01:55:57 fplanque 469 * level based user permissions 470 * 471 * Revision 1.29 2007/06/03 02:55:06 fplanque 472 * no message 473 * 474 * Revision 1.28 2007/06/03 02:54:18 fplanque 475 * Stuff for permission maniacs (admin part only, actual perms checks to be implemented) 476 * Newbies will not see this complexity since advanced perms are now disabled by default. 477 * 478 * Revision 1.27 2007/05/29 01:17:20 fplanque 479 * advanced admin blog settings are now restricted by a special permission 480 * 481 * Revision 1.26 2007/05/28 01:33:22 fplanque 482 * permissions/fixes 483 * 484 * Revision 1.25 2007/05/13 18:49:55 fplanque 485 * made autoselect_blog() more robust under PHP4 486 * 487 * Revision 1.24 2007/05/09 00:58:55 fplanque 488 * massive cleanup of old functions 489 * 490 * Revision 1.23 2007/04/26 00:11:05 fplanque 491 * (c) 2007 492 * 493 * Revision 1.22 2007/03/11 22:48:19 fplanque 494 * handling of permission to redirect posts 495 * 496 * Revision 1.21 2007/03/11 22:30:07 fplanque 497 * cleaned up group perms 498 * 499 * Revision 1.20 2007/03/07 02:38:58 fplanque 500 * do some recovery on incorrect $blog 501 * 502 * Revision 1.19 2006/12/28 18:30:30 fplanque 503 * cleanup of obsolete var 504 * 505 * Revision 1.18 2006/12/18 13:14:34 fplanque 506 * bugfix 507 * 508 * Revision 1.17 2006/12/18 03:20:41 fplanque 509 * _header will always try to set $Blog. 510 * controllers can use valid_blog_requested() to make sure we have one 511 * controllers should call set_working_blog() to change $blog, so that it gets memorized in the user settings 512 * 513 * Revision 1.16 2006/11/24 18:27:23 blueyed 514 * Fixed link to b2evo CVS browsing interface in file docblocks 515 * 516 * Revision 1.15 2006/11/13 20:49:52 fplanque 517 * doc/cleanup :/ 518 * 519 * Revision 1.14 2006/10/08 03:52:09 blueyed 520 * Tell BlogCache that it has loaded all. 521 */ 522 ?>
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 |
![]() |