[ Index ]
 

Code source de b2evolution 2.1.0-beta

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/blogs/inc/collections/model/ -> _blog.funcs.php (source)

   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  ?>


Généré le : Thu Nov 29 23:58:50 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics