[ 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/views/ -> _coll_group_perm.form.php (source)

   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&amp;action=edit&amp;tab=permgroup&amp;blog='.$edited_Blog->ID.'&amp;layout=default"
  99                      onclick="blogperms_switch_layout(\'default\'); return false;">'.T_('Simple').'</a>] ';
 100  
 101      echo '[<a href="?ctrl=coll_settings&amp;action=edit&amp;tab=permgroup&amp;blog='.$edited_Blog->ID.'&amp;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&amp;action=edit&amp;tab=permgroup&amp;blog='.$edited_Blog->ID.'&amp;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&amp;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"' : '' ).'>&lt; own level</option>';
 303      $r .= '<option value="le" '.( $row->bloggroup_perm_edit == 'le' ? 'selected="selected"' : '' ).'>&le; 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 '&nbsp;';
 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' => '&nbsp;',
 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&amp;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  ?>


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