[ Index ]

PHP Cross Reference of phpBB 3.0 Beta 3

title

Body

[close]

/includes/ucp/ -> ucp_groups.php (source)

   1  <?php
   2  /** 
   3  *
   4  * @package ucp
   5  * @version $Id: ucp_groups.php,v 1.39 2006/11/03 21:04:10 acydburn Exp $
   6  * @copyright (c) 2005 phpBB Group 
   7  * @license http://opensource.org/licenses/gpl-license.php GNU Public License 
   8  *
   9  */
  10  
  11  /**
  12  * ucp_groups
  13  * @package ucp
  14  */
  15  class ucp_groups
  16  {
  17      var $u_action;
  18  
  19  	function main($id, $mode)
  20      {
  21          global $config, $phpbb_root_path, $phpEx;
  22          global $db, $user, $auth, $cache, $template;
  23  
  24          $user->add_lang('groups');
  25  
  26          $return_page = '<br /><br />' . sprintf($user->lang['RETURN_PAGE'], '<a href="' . $this->u_action . '">', '</a>');
  27  
  28          $mark_ary    = request_var('mark', array(0));
  29          $submit        = (!empty($_POST['submit'])) ? true : false;
  30          $delete        = (!empty($_POST['delete'])) ? true : false;
  31          $error = $data = array();
  32  
  33          switch ($mode)
  34          {
  35              case 'membership':
  36          
  37                  $this->page_title = 'UCP_USERGROUPS_MEMBER';
  38  
  39                  if ($submit || isset($_POST['change_default']))
  40                  {
  41                      $action = (isset($_POST['change_default'])) ? 'change_default' : request_var('action', '');
  42                      $group_id = ($action == 'change_default') ? request_var('default', 0) : request_var('selected', 0);
  43  
  44                      if (!$group_id)
  45                      {
  46                          trigger_error('NO_GROUP_SELECTED');
  47                      }
  48  
  49                      $sql = 'SELECT group_id, group_name, group_type
  50                          FROM ' . GROUPS_TABLE . "
  51                          WHERE group_id IN ($group_id, {$user->data['group_id']})";
  52                      $result = $db->sql_query($sql);
  53  
  54                      $group_row = array();
  55                      while ($row = $db->sql_fetchrow($result))
  56                      {
  57                          $row['group_name'] = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'];
  58                          $group_row[$row['group_id']] = $row;
  59                      }
  60                      $db->sql_freeresult($result);
  61  
  62                      if (!sizeof($group_row))
  63                      {
  64                          trigger_error('GROUP_NOT_EXIST');
  65                      }
  66  
  67                      switch ($action)
  68                      {
  69                          case 'change_default':
  70                              // User already having this group set as default?
  71                              if ($group_id == $user->data['group_id'])
  72                              {
  73                                  trigger_error($user->lang['ALREADY_DEFAULT_GROUP'] . $return_page);
  74                              }
  75  
  76                              if (!$auth->acl_get('u_chggrp'))
  77                              {
  78                                  trigger_error($user->lang['NOT_AUTHORIZED'] . $return_page);
  79                              }
  80  
  81                              // User needs to be member of the group in order to make it default
  82                              if (!group_memberships($group_id, $user->data['user_id'], true))
  83                              {
  84                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
  85                              }
  86  
  87                              if (confirm_box(true))
  88                              {
  89                                  group_user_attributes('default', $group_id, $user->data['user_id']);
  90  
  91                                  add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_CHANGE', sprintf($user->lang['USER_GROUP_CHANGE'], $group_row[$group_id]['group_name'], $group_row[$user->data['group_id']]['group_name']));
  92  
  93                                  meta_refresh(3, $this->u_action);
  94                                  trigger_error($user->lang['CHANGED_DEFAULT_GROUP'] . $return_page);
  95                              }
  96                              else
  97                              {
  98                                  $s_hidden_fields = array(
  99                                      'default'        => $group_id,
 100                                      'change_default'=> true
 101                                  );
 102  
 103                                  confirm_box(false, sprintf($user->lang['GROUP_CHANGE_DEFAULT'], $group_row[$group_id]['group_name']), build_hidden_fields($s_hidden_fields));
 104                              }
 105  
 106                          break;
 107  
 108                          case 'resign':
 109  
 110                              // User tries to resign from default group but is not allowed to change it?
 111                              if ($group_id == $user->data['group_id'] && !$auth->acl_get('u_chggrp'))
 112                              {
 113                                  trigger_error($user->lang['NOT_RESIGN_FROM_DEFAULT_GROUP'] . $return_page);
 114                              }
 115  
 116                              if (!($row = group_memberships($group_id, $user->data['user_id'])))
 117                              {
 118                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 119                              }
 120                              list(, $row) = each($row);
 121  
 122                              if (confirm_box(true))
 123                              {
 124                                  group_user_del($group_id, $user->data['user_id']);
 125  
 126                                  add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_RESIGN', $group_row[$group_id]['group_name']);
 127  
 128                                  meta_refresh(3, $this->u_action);
 129                                  trigger_error($user->lang[($row['user_pending']) ? 'GROUP_RESIGNED_PENDING' : 'GROUP_RESIGNED_MEMBERSHIP'] . $return_page);
 130                              }
 131                              else
 132                              {
 133                                  $s_hidden_fields = array(
 134                                      'selected'        => $group_id,
 135                                      'action'        => 'resign',
 136                                      'submit'        => true
 137                                  );
 138  
 139                                  confirm_box(false, ($row['user_pending']) ? 'GROUP_RESIGN_PENDING' : 'GROUP_RESIGN_MEMBERSHIP', build_hidden_fields($s_hidden_fields));
 140                              }
 141  
 142                          break;
 143  
 144                          case 'join':
 145  
 146                              if (group_memberships($group_id, $user->data['user_id'], true))
 147                              {
 148                                  trigger_error($user->lang['ALREADY_IN_GROUP'] . $return_page);
 149                              }
 150  
 151                              // Check permission to join (open group or request)
 152                              if ($group_row[$group_id]['group_type'] != GROUP_OPEN && $group_row[$group_id]['group_type'] != GROUP_FREE)
 153                              {
 154                                  trigger_error($user->lang['CANNOT_JOIN_GROUP'] . $return_page);
 155                              }
 156  
 157                              if (confirm_box(true))
 158                              {
 159                                  if ($group_row[$group_id]['group_type'] == GROUP_FREE)
 160                                  {
 161                                      group_user_add($group_id, $user->data['user_id']);
 162  
 163                                      $email_template = 'group_added';
 164                                  }
 165                                  else
 166                                  {
 167                                      group_user_add($group_id, $user->data['user_id'], false, false, false, 0, 1);
 168  
 169                                      $email_template = 'group_request';
 170                                  }
 171  
 172                                  include_once($phpbb_root_path . 'includes/functions_messenger.' . $phpEx);
 173                                  $messenger = new messenger();
 174  
 175                                  $sql = 'SELECT u.username, u.user_email, u.user_notify_type, u.user_jabber, u.user_lang
 176                                      FROM ' . USER_GROUP_TABLE . ' ug, ' . USERS_TABLE . ' u
 177                                      WHERE ug.user_id = u.user_id
 178                                          AND ' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? "ug.user_id = {$user->data['user_id']}" : 'ug.group_leader = 1') . "
 179                                          AND ug.group_id = $group_id";
 180                                  $result = $db->sql_query($sql);
 181  
 182                                  while ($row = $db->sql_fetchrow($result))
 183                                  {
 184                                      $messenger->template($email_template, $row['user_lang']);
 185  
 186                                      $messenger->replyto($config['board_email']);
 187                                      $messenger->to($row['user_email'], $row['username']);
 188                                      $messenger->im($row['user_jabber'], $row['username']);
 189  
 190                                      $messenger->assign_vars(array(
 191                                          'USERNAME'        => htmlspecialchars_decode($row['username']),
 192                                          'GROUP_NAME'    => htmlspecialchars_decode($group_row[$group_id]['group_name']),
 193  
 194                                          'U_PENDING'        => generate_board_url() . "/ucp.$phpEx?i=groups&mode=manage&action=list&g=$group_id",
 195                                          'U_GROUP'        => generate_board_url() . "/memberlist.$phpEx?mode=group&g=$group_id")
 196                                      );
 197  
 198                                      $messenger->send($row['user_notify_type']);
 199                                      $messenger->reset();
 200                                  }
 201                                  $db->sql_freeresult($result);
 202  
 203                                  $messenger->save_queue();
 204  
 205                                  add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_JOIN' . (($group_row[$group_id]['group_type'] == GROUP_FREE) ? '' : '_PENDING'), $group_row[$group_id]['group_name']);
 206  
 207                                  meta_refresh(3, $this->u_action);
 208                                  trigger_error($user->lang[($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOINED' : 'GROUP_JOINED_PENDING'] . $return_page);
 209                              }
 210                              else
 211                              {
 212                                  $s_hidden_fields = array(
 213                                      'selected'        => $group_id,
 214                                      'action'        => 'join',
 215                                      'submit'        => true
 216                                  );
 217  
 218                                  confirm_box(false, ($group_row[$group_id]['group_type'] == GROUP_FREE) ? 'GROUP_JOIN' : 'GROUP_JOIN_PENDING', build_hidden_fields($s_hidden_fields));
 219                              }
 220  
 221                          break;
 222  
 223                          case 'demote':
 224  
 225                              if (!($row = group_memberships($group_id, $user->data['user_id'])))
 226                              {
 227                                  trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 228                              }
 229                              list(, $row) = each($row);
 230  
 231                              if (!$row['group_leader'])
 232                              {
 233                                  trigger_error($user->lang['NOT_LEADER_OF_GROUP'] . $return_page);
 234                              }
 235  
 236                              if (confirm_box(true))
 237                              {
 238                                  group_user_attributes('demote', $group_id, $user->data['user_id']);
 239  
 240                                  add_log('user', $user->data['user_id'], 'LOG_USER_GROUP_DEMOTE', $group_row[$group_id]['group_name']);
 241  
 242                                  meta_refresh(3, $this->u_action);
 243                                  trigger_error($user->lang['USER_GROUP_DEMOTED'] . $return_page);
 244                              }
 245                              else
 246                              {
 247                                  $s_hidden_fields = array(
 248                                      'selected'        => $group_id,
 249                                      'action'        => 'demote',
 250                                      'submit'        => true
 251                                  );
 252  
 253                                  confirm_box(false, 'USER_GROUP_DEMOTE', build_hidden_fields($s_hidden_fields));
 254                              }
 255  
 256                          break;
 257                      }
 258                  }
 259  
 260                  $sql = 'SELECT g.*, ug.group_leader, ug.user_pending
 261                      FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
 262                      WHERE ug.user_id = ' . $user->data['user_id'] . '
 263                          AND g.group_id = ug.group_id
 264                      ORDER BY g.group_type DESC, g.group_name';
 265                  $result = $db->sql_query($sql);
 266  
 267                  $group_id_ary = array();
 268                  $leader_count = $member_count = $pending_count = 0;
 269                  while ($row = $db->sql_fetchrow($result))
 270                  {
 271                      $block = ($row['group_leader']) ? 'leader' : (($row['user_pending']) ? 'pending' : 'member');
 272  
 273                      switch ($row['group_type'])
 274                      {
 275                          case GROUP_OPEN:
 276                              $group_status = 'OPEN';
 277                          break;
 278  
 279                          case GROUP_CLOSED:
 280                              $group_status = 'CLOSED';
 281                          break;
 282  
 283                          case GROUP_HIDDEN:
 284                              $group_status = 'HIDDEN';
 285                          break;
 286  
 287                          case GROUP_SPECIAL:
 288                              $group_status = 'SPECIAL';
 289                          break;
 290  
 291                          case GROUP_FREE:
 292                              $group_status = 'FREE';
 293                          break;
 294                      }
 295  
 296                      $template->assign_block_vars($block, array(
 297                          'GROUP_ID'        => $row['group_id'],
 298                          'GROUP_NAME'    => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
 299                          'GROUP_DESC'    => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
 300                          'GROUP_SPECIAL'    => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
 301                          'GROUP_STATUS'    => $user->lang['GROUP_IS_' . $group_status],
 302  
 303                          'U_VIEW_GROUP'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
 304  
 305                          'S_GROUP_DEFAULT'    => ($row['group_id'] == $user->data['group_id']) ? true : false,
 306                          'S_ROW_COUNT'        => ${$block . '_count'}++)
 307                      );
 308  
 309                      $group_id_ary[] = $row['group_id'];
 310                  }
 311                  $db->sql_freeresult($result);
 312  
 313                  // Hide hidden groups unless user is an admin with group privileges
 314                  $sql_and = ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? '<> ' . GROUP_SPECIAL : 'NOT IN (' . GROUP_SPECIAL . ', ' . GROUP_HIDDEN . ')';
 315                  $sql = 'SELECT group_id, group_name, group_desc, group_desc_uid, group_desc_bitfield, group_desc_options, group_type
 316                      FROM ' . GROUPS_TABLE . '
 317                      WHERE ' . $db->sql_in_set('group_id', $group_id_ary, true) . "
 318                          AND group_type $sql_and
 319                      ORDER BY group_type DESC, group_name";
 320                  $result = $db->sql_query($sql);
 321  
 322                  $nonmember_count = 0;
 323                  while ($row = $db->sql_fetchrow($result))
 324                  {
 325                      switch ($row['group_type'])
 326                      {
 327                          case GROUP_OPEN:
 328                              $group_status = 'OPEN';
 329                          break;
 330  
 331                          case GROUP_CLOSED:
 332                              $group_status = 'CLOSED';
 333                          break;
 334  
 335                          case GROUP_HIDDEN:
 336                              $group_status = 'HIDDEN';
 337                          break;
 338  
 339                          case GROUP_SPECIAL:
 340                              $group_status = 'SPECIAL';
 341                          break;
 342  
 343                          case GROUP_FREE:
 344                              $group_status = 'FREE';
 345                          break;
 346                      }
 347  
 348                      $template->assign_block_vars('nonmember', array(
 349                          'GROUP_ID'        => $row['group_id'],
 350                          'GROUP_NAME'    => ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name'],
 351                          'GROUP_DESC'    => ($row['group_type'] <> GROUP_SPECIAL) ? generate_text_for_display($row['group_desc'], $row['group_desc_uid'], $row['group_desc_bitfield'], $row['group_desc_options']) : $user->lang['GROUP_IS_SPECIAL'],
 352                          'GROUP_SPECIAL'    => ($row['group_type'] <> GROUP_SPECIAL) ? false : true,
 353                          'GROUP_CLOSED'    => ($row['group_type'] <> GROUP_CLOSED || $auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) ? false : true,
 354                          'GROUP_STATUS'    => $user->lang['GROUP_IS_' . $group_status],
 355                          'S_CAN_JOIN'    => ($row['group_type'] == GROUP_OPEN || $row['group_type'] == GROUP_FREE) ? true : false,
 356  
 357                          'U_VIEW_GROUP'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=group&amp;g=' . $row['group_id']),
 358  
 359                          'S_ROW_COUNT'    => $nonmember_count++)
 360                      );
 361                  }
 362                  $db->sql_freeresult($result);
 363  
 364                  $template->assign_vars(array(
 365                      'S_CHANGE_DEFAULT'    => ($auth->acl_get('u_chggrp')) ? true : false,
 366                      'S_LEADER_COUNT'    => $leader_count,
 367                      'S_MEMBER_COUNT'    => $member_count,
 368                      'S_PENDING_COUNT'    => $pending_count,
 369                      'S_NONMEMBER_COUNT'    => $nonmember_count,
 370  
 371                      'S_UCP_ACTION'            => $this->u_action)
 372                  );
 373  
 374              break;
 375  
 376              case 'manage':
 377  
 378                  $this->page_title = 'UCP_USERGROUPS_MANAGE';
 379                  $action        = (isset($_POST['addusers'])) ? 'addusers' : request_var('action', '');
 380                  $group_id    = request_var('g', 0);
 381  
 382                  if ($group_id)
 383                  {
 384                      $sql = 'SELECT * 
 385                          FROM ' . GROUPS_TABLE . " 
 386                          WHERE group_id = $group_id";
 387                      $result = $db->sql_query($sql);
 388                      $group_row = $db->sql_fetchrow($result);
 389                      $db->sql_freeresult($result);
 390  
 391                      if (!$group_row)
 392                      {
 393                          trigger_error($user->lang['NO_GROUP'] . $return_page);
 394                      }
 395                  }
 396  
 397                  switch ($action)
 398                  {
 399                      case 'edit':
 400  
 401                          if (!$group_id)
 402                          {
 403                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 404                          }
 405  
 406                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 407                          {
 408                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 409                          }
 410  
 411                          $file_uploads = (@ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on') ? true : false;
 412                          $user->add_lang(array('acp/groups', 'acp/common'));
 413  
 414                          $data = $submit_ary = array();
 415  
 416                          $update    = (isset($_POST['update'])) ? true : false;
 417  
 418                          $error = array();
 419  
 420                          $avatar_select = basename(request_var('avatar_select', ''));
 421                          $category = basename(request_var('category', ''));
 422  
 423                          $can_upload = (file_exists($phpbb_root_path . $config['avatar_path']) && is_writeable($phpbb_root_path . $config['avatar_path']) && $file_uploads) ? true : false;
 424  
 425                          // Did we submit?
 426                          if ($update)
 427                          {
 428                              $group_name    = request_var('group_name', '', true);
 429                              $group_desc = request_var('group_desc', '', true);
 430                              $group_type    = request_var('group_type', GROUP_FREE);
 431  
 432                              $allow_desc_bbcode    = request_var('desc_parse_bbcode', false);
 433                              $allow_desc_urls    = request_var('desc_parse_urls', false);
 434                              $allow_desc_smilies    = request_var('desc_parse_smilies', false);
 435  
 436                              $data['uploadurl']    = request_var('uploadurl', '');
 437                              $data['remotelink'] = request_var('remotelink', '');
 438                              $delete                = request_var('delete', '');
 439  
 440                              $submit_ary = array(
 441                                  'colour'        => request_var('group_colour', ''),
 442                                  'rank'            => request_var('group_rank', 0),
 443                                  'receive_pm'    => isset($_REQUEST['group_receive_pm']) ? 1 : 0,
 444                                  'message_limit'    => request_var('group_message_limit', 0)
 445                              );
 446  
 447                              if (!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl'] || $data['remotelink'])
 448                              {
 449                                  $data['width']        = request_var('width', '');
 450                                  $data['height']        = request_var('height', '');
 451  
 452                                  // Avatar stuff
 453                                  $var_ary = array(
 454                                      'uploadurl'        => array('string', true, 5, 255), 
 455                                      'remotelink'    => array('string', true, 5, 255), 
 456                                      'width'            => array('string', true, 1, 3), 
 457                                      'height'        => array('string', true, 1, 3), 
 458                                  );
 459  
 460                                  if (!($error = validate_data($data, $var_ary)))
 461                                  {
 462                                      $data['user_id'] = "g$group_id";
 463  
 464                                      if ((!empty($_FILES['uploadfile']['tmp_name']) || $data['uploadurl']) && $can_upload)
 465                                      {
 466                                          list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_upload($data, $error);
 467                                      }
 468                                      else if ($data['remotelink'])
 469                                      {
 470                                          list($submit_ary['avatar_type'], $submit_ary['avatar'], $submit_ary['avatar_width'], $submit_ary['avatar_height']) = avatar_remote($data, $error);
 471                                      }
 472                                  }
 473                              }
 474                              else if ($avatar_select && $config['allow_avatar_local'])
 475                              {
 476                                  // check avatar gallery
 477                                  if (is_dir($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category))
 478                                  {
 479                                      $submit_ary['avatar_type'] = AVATAR_GALLERY;
 480  
 481                                      list($submit_ary['avatar_width'], $submit_ary['avatar_height']) = getimagesize($phpbb_root_path . $config['avatar_gallery_path'] . '/' . $category . '/' . $avatar_select);
 482                                      $submit_ary['avatar'] = $category . '/' . $avatar_select;
 483                                  }
 484                              }
 485                              else if ($delete)
 486                              {
 487                                  $submit_ary['avatar'] = '';
 488                                  $submit_ary['avatar_type'] = $submit_ary['avatar_width'] = $submit_ary['avatar_height'] = 0;
 489                              }
 490  
 491                              if ((isset($submit_ary['avatar']) && $submit_ary['avatar'] && (!isset($group_row['group_avatar']) || $group_row['group_avatar'] != $submit_ary['avatar'])) || $delete)
 492                              {
 493                                  if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
 494                                  {
 495                                      avatar_delete('group', $group_row);
 496                                  }
 497                              }
 498  
 499                              if (!sizeof($error))
 500                              {
 501                                  // Only set the rank, colour, etc. if it's changed or if we're adding a new
 502                                  // group. This prevents existing group members being updated if no changes 
 503                                  // were made.
 504                          
 505                                  $group_attributes = array();
 506                                  $test_variables = array('rank', 'colour', 'avatar', 'avatar_type', 'avatar_width', 'avatar_height');
 507                                  foreach ($test_variables as $test)
 508                                  {
 509                                      if ($action == 'add' || (isset($submit_ary[$test]) && $group_row['group_' . $test] != $submit_ary[$test]))
 510                                      {
 511                                          $group_attributes['group_' . $test] = $group_row['group_' . $test] = $submit_ary[$test];
 512                                      }
 513                                  }
 514  
 515                                  if (!($error = group_create($group_id, $group_type, $group_name, $group_desc, $group_attributes, $allow_desc_bbcode, $allow_desc_urls, $allow_desc_smilies)))
 516                                  {
 517                                      $cache->destroy('sql', GROUPS_TABLE);
 518  
 519                                      $message = ($action == 'edit') ? 'GROUP_UPDATED' : 'GROUP_CREATED';
 520                                      trigger_error($user->lang[$message] . $return_page);
 521                                  }
 522                              }
 523  
 524                              if (sizeof($error))
 525                              {
 526                                  $group_rank = $submit_ary['rank'];
 527  
 528                                  $group_desc_data = array(
 529                                      'text'            => $group_desc,
 530                                      'allow_bbcode'    => $allow_desc_bbcode,
 531                                      'allow_smilies'    => $allow_desc_smilies,
 532                                      'allow_urls'    => $allow_desc_urls
 533                                  );
 534                              }
 535                          }
 536                          else if (!$group_id)
 537                          {
 538                              $group_name = request_var('group_name', '', true);
 539                              $group_desc_data = array(
 540                                  'text'            => '',
 541                                  'allow_bbcode'    => true,
 542                                  'allow_smilies'    => true,
 543                                  'allow_urls'    => true
 544                              );
 545                              $group_rank = 0;
 546                              $group_type = GROUP_OPEN;
 547                          }
 548                          else
 549                          {
 550                              $group_name = $group_row['group_name'];
 551                              $group_desc_data = generate_text_for_edit($group_row['group_desc'], $group_row['group_desc_uid'], $group_row['group_desc_options']);
 552                              $group_type = $group_row['group_type'];
 553                              $group_rank = $group_row['group_rank'];
 554                          }
 555  
 556                          $sql = 'SELECT * 
 557                              FROM ' . RANKS_TABLE . '
 558                              WHERE rank_special = 1
 559                              ORDER BY rank_title';
 560                          $result = $db->sql_query($sql);
 561  
 562                          $rank_options = '<option value="0"' . ((!$group_rank) ? ' selected="selected"' : '') . '>' . $user->lang['USER_DEFAULT'] . '</option>';
 563                          while ($row = $db->sql_fetchrow($result))
 564                          {
 565                              $selected = ($group_rank && $row['rank_id'] == $group_rank) ? ' selected="selected"' : '';
 566                              $rank_options .= '<option value="' . $row['rank_id'] . '"' . $selected . '>' . $row['rank_title'] . '</option>';
 567                          }
 568                          $db->sql_freeresult($result);
 569  
 570                          $type_free        = ($group_type == GROUP_FREE) ? ' checked="checked"' : '';
 571                          $type_open        = ($group_type == GROUP_OPEN) ? ' checked="checked"' : '';
 572                          $type_closed    = ($group_type == GROUP_CLOSED) ? ' checked="checked"' : '';
 573                          $type_hidden    = ($group_type == GROUP_HIDDEN) ? ' checked="checked"' : '';
 574  
 575                          if (isset($group_row['group_avatar']) && $group_row['group_avatar'])
 576                          {
 577                              switch ($group_row['group_avatar_type'])
 578                              {
 579                                  case AVATAR_UPLOAD:
 580                                      $avatar_img = $phpbb_root_path . $config['avatar_path'] . '/';
 581                                  break;
 582  
 583                                  case AVATAR_GALLERY:
 584                                      $avatar_img = $phpbb_root_path . $config['avatar_gallery_path'] . '/';
 585                                  break;
 586                              }
 587                              $avatar_img .= $group_row['group_avatar'];
 588  
 589                              $avatar_img = '<img src="' . $avatar_img . '" width="' . $group_row['group_avatar_width'] . '" height="' . $group_row['group_avatar_height'] . '" alt="" />';
 590                          }
 591                          else
 592                          {
 593                              $avatar_img = '<img src="' . $phpbb_root_path . 'adm/images/no_avatar.gif" alt="" />';
 594                          }
 595  
 596                          $display_gallery = (isset($_POST['display_gallery'])) ? true : false;
 597  
 598                          if ($config['allow_avatar_local'] && $display_gallery)
 599                          {
 600                              avatar_gallery($category, $avatar_select, 4);
 601                          }
 602  
 603                          $template->assign_vars(array(
 604                              'S_EDIT'            => true,
 605                              'S_INCLUDE_SWATCH'    => true,
 606                              'S_CAN_UPLOAD'        => $can_upload,
 607                              'S_FORM_ENCTYPE'    => ($can_upload) ? ' enctype="multipart/form-data"' : '',
 608                              'S_ERROR'            => (sizeof($error)) ? true : false,
 609                              'S_SPECIAL_GROUP'    => ($group_type == GROUP_SPECIAL) ? true : false,
 610                              'S_DISPLAY_GALLERY'    => ($config['allow_avatar_local'] && !$display_gallery) ? true : false,
 611                              'S_IN_GALLERY'        => ($config['allow_avatar_local'] && $display_gallery) ? true : false,
 612  
 613                              'ERROR_MSG'                => (sizeof($error)) ? implode('<br />', $error) : '',
 614                              'GROUP_NAME'            => ($group_type == GROUP_SPECIAL) ? $user->lang['G_' . $group_name] : $group_name,
 615                              'GROUP_INTERNAL_NAME'    => $group_name,
 616                              'GROUP_DESC'            => $group_desc_data['text'],
 617                              'GROUP_RECEIVE_PM'        => (isset($group_row['group_receive_pm']) && $group_row['group_receive_pm']) ? ' checked="checked"' : '',
 618                              'GROUP_MESSAGE_LIMIT'    => (isset($group_row['group_message_limit'])) ? $group_row['group_message_limit'] : 0,
 619                              'GROUP_COLOUR'            => (isset($group_row['group_colour'])) ? $group_row['group_colour'] : '',
 620  
 621                              'S_DESC_BBCODE_CHECKED'    => $group_desc_data['allow_bbcode'],
 622                              'S_DESC_URLS_CHECKED'    => $group_desc_data['allow_urls'],
 623                              'S_DESC_SMILIES_CHECKED'=> $group_desc_data['allow_smilies'],
 624  
 625                              'S_RANK_OPTIONS'        => $rank_options,
 626                              'AVATAR_IMAGE'            => $avatar_img,
 627                              'AVATAR_MAX_FILESIZE'    => $config['avatar_filesize'],
 628                              'GROUP_AVATAR_WIDTH'    => (isset($group_row['group_avatar_width'])) ? $group_row['group_avatar_width'] : '',
 629                              'GROUP_AVATAR_HEIGHT'    => (isset($group_row['group_avatar_height'])) ? $group_row['group_avatar_height'] : '',
 630  
 631                              'GROUP_TYPE_FREE'        => GROUP_FREE,
 632                              'GROUP_TYPE_OPEN'        => GROUP_OPEN,
 633                              'GROUP_TYPE_CLOSED'        => GROUP_CLOSED,
 634                              'GROUP_TYPE_HIDDEN'        => GROUP_HIDDEN,
 635                              'GROUP_TYPE_SPECIAL'    => GROUP_SPECIAL,
 636  
 637                              'GROUP_FREE'        => $type_free,
 638                              'GROUP_OPEN'        => $type_open,
 639                              'GROUP_CLOSED'        => $type_closed,
 640                              'GROUP_HIDDEN'        => $type_hidden,
 641  
 642                              'U_SWATCH'            => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&amp;name=group_colour'),
 643                              'UA_SWATCH'            => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour', false),
 644                              'S_UCP_ACTION'        => $this->u_action . "&amp;action=$action&amp;g=$group_id",
 645                              'L_AVATAR_EXPLAIN'    => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)))
 646                          );
 647  
 648                      break;
 649  
 650                      case 'list':
 651  
 652                          if (!$group_id)
 653                          {
 654                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 655                          }
 656  
 657                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 658                          {
 659                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 660                          }
 661  
 662                          $user->add_lang(array('acp/groups', 'acp/common'));
 663  
 664                          // Total number of group members (non-leaders)
 665                          $sql = 'SELECT COUNT(user_id) AS total_members 
 666                              FROM ' . USER_GROUP_TABLE . " 
 667                              WHERE group_id = $group_id 
 668                                  AND group_leader <> 1";
 669                          $result = $db->sql_query($sql);
 670                          $total_members = (int) $db->sql_fetchfield('total_members');
 671                          $db->sql_freeresult($result);
 672  
 673                          $start = request_var('start', 0);
 674  
 675                          // Grab the members
 676                          $sql = 'SELECT u.user_id, u.username, u.user_regdate, u.user_posts, u.group_id, ug.group_leader, ug.user_pending 
 677                              FROM ' . USERS_TABLE . ' u, ' . USER_GROUP_TABLE . " ug 
 678                              WHERE ug.group_id = $group_id 
 679                                  AND u.user_id = ug.user_id
 680                              ORDER BY ug.group_leader DESC, ug.user_pending ASC, u.username";
 681                          $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
 682  
 683                          $pending = false;
 684  
 685                          while ($row = $db->sql_fetchrow($result))
 686                          {
 687                              if ($row['user_pending'] && !$pending)
 688                              {
 689                                  $template->assign_block_vars('member', array(
 690                                      'S_PENDING'        => true)
 691                                  );
 692  
 693                                  $pending = true;
 694                              }
 695  
 696                              $template->assign_block_vars($row['group_leader'] ? 'leader' : 'member', array(
 697                                  'USERNAME'            => $row['username'],
 698                                  'U_USER_VIEW'        => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=viewprofile&amp;u=' . $row['user_id']),
 699                                  'S_GROUP_DEFAULT'    => ($row['group_id'] == $group_id) ? true : false,
 700                                  'JOINED'            => ($row['user_regdate']) ? $user->format_date($row['user_regdate']) : ' - ',
 701                                  'USER_POSTS'        => $row['user_posts'],
 702                                  'USER_ID'            => $row['user_id'])
 703                              );
 704                          }
 705                          $db->sql_freeresult($result);
 706  
 707                          $s_action_options = '';
 708                          $options = array('default' => 'DEFAULT', 'approve' => 'APPROVE', 'deleteusers' => 'DELETE');
 709  
 710                          foreach ($options as $option => $lang)
 711                          {
 712                              $s_action_options .= '<option value="' . $option . '">' . $user->lang['GROUP_' . $lang] . '</option>';
 713                          }
 714  
 715                          $template->assign_vars(array(
 716                              'S_LIST'            => true,
 717                              'S_ACTION_OPTIONS'    => $s_action_options,
 718                              'S_ON_PAGE'            => on_page($total_members, $config['topics_per_page'], $start),
 719                              'PAGINATION'        => generate_pagination($this->u_action . "&amp;action=$action&amp;g=$group_id", $total_members, $config['topics_per_page'], $start, true),
 720  
 721                              'U_ACTION'            => $this->u_action . "&amp;g=$group_id",
 722                              'U_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&amp;form=ucp&amp;field=usernames'),
 723                              'UA_FIND_USERNAME'    => append_sid("{$phpbb_root_path}memberlist.$phpEx", 'mode=searchuser&form=ucp&field=usernames', false))
 724                          );
 725  
 726                      break;
 727  
 728                      case 'approve':
 729  
 730                          if (!$group_id)
 731                          {
 732                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 733                          }
 734  
 735                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 736                          {
 737                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 738                          }
 739  
 740                          $user->add_lang('acp/groups');
 741  
 742                          // Approve, demote or promote
 743                          group_user_attributes('approve', $group_id, $mark_ary, false, ($group_id) ? $group_row['group_name'] : false);
 744  
 745                          trigger_error($user->lang['USERS_APPROVED'] . $return_page);
 746  
 747                      break;
 748  
 749                      case 'default':
 750  
 751                          if (!$group_id)
 752                          {
 753                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 754                          }
 755  
 756                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 757                          {
 758                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 759                          }
 760  
 761                          if (confirm_box(true))
 762                          {
 763                              if (!sizeof($mark_ary))
 764                              {
 765                                  $start = 0;
 766                  
 767                                  do
 768                                  {
 769                                      $sql = 'SELECT user_id 
 770                                          FROM ' . USER_GROUP_TABLE . "
 771                                          WHERE group_id = $group_id 
 772                                          ORDER BY user_id";
 773                                      $result = $db->sql_query_limit($sql, 200, $start);
 774  
 775                                      $mark_ary = array();
 776                                      if ($row = $db->sql_fetchrow($result))
 777                                      {
 778                                          do
 779                                          {
 780                                              $mark_ary[] = $row['user_id'];
 781                                          }
 782                                          while ($row = $db->sql_fetchrow($result));
 783  
 784                                          group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 785  
 786                                          $start = (sizeof($mark_ary) < 200) ? 0 : $start + 200;
 787                                      }
 788                                      else
 789                                      {
 790                                          $start = 0;
 791                                      }
 792                                      $db->sql_freeresult($result);
 793                                  }
 794                                  while ($start);
 795                              }
 796                              else
 797                              {
 798                                  group_user_attributes('default', $group_id, $mark_ary, false, $group_row['group_name'], $group_row);
 799                              }
 800  
 801                              $user->add_lang('acp/groups');
 802  
 803                              trigger_error($user->lang['GROUP_DEFS_UPDATED'] . $return_page);
 804                          }
 805                          else
 806                          {
 807                              $user->add_lang('acp/common');
 808  
 809                              confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 810                                  'mark'        => $mark_ary,
 811                                  'g'            => $group_id,
 812                                  'i'            => $id,
 813                                  'mode'        => $mode,
 814                                  'action'    => $action))
 815                              );
 816                          }
 817  
 818                      break;
 819  
 820                      case 'deleteusers':
 821  
 822                          $user->add_lang(array('acp/groups', 'acp/common'));
 823  
 824                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 825                          {
 826                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 827                          }
 828  
 829                          if (confirm_box(true))
 830                          {
 831                              if (!$group_id)
 832                              {
 833                                  trigger_error($user->lang['NO_GROUP'] . $return_page);
 834                              }
 835  
 836                              $error = group_user_del($group_id, $mark_ary, false, $group_row['group_name']);
 837  
 838                              if ($error)
 839                              {
 840                                  trigger_error($user->lang[$error] . $return_page);
 841                              }
 842  
 843                              trigger_error($user->lang['GROUP_USERS_REMOVE'] . $return_page);
 844                          }
 845                          else
 846                          {
 847                              confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
 848                                  'mark'        => $mark_ary,
 849                                  'g'            => $group_id,
 850                                  'i'            => $id,
 851                                  'mode'        => $mode,
 852                                  'action'    => $action))
 853                              );
 854                          }
 855  
 856                      break;
 857  
 858                      case 'addusers':
 859  
 860                          $user->add_lang(array('acp/groups', 'acp/common'));
 861  
 862                          $name_ary = request_var('usernames', '', true);
 863  
 864                          if (!$group_id)
 865                          {
 866                              trigger_error($user->lang['NO_GROUP'] . $return_page);
 867                          }
 868  
 869                          if (!$name_ary)
 870                          {
 871                              trigger_error($user->lang['NO_USERS'] . $return_page);
 872                          }
 873  
 874                          if (!($row = group_memberships($group_id, $user->data['user_id'])) || !$row[0]['group_leader'])
 875                          {
 876                              trigger_error($user->lang['NOT_MEMBER_OF_GROUP'] . $return_page);
 877                          }
 878  
 879                          $name_ary = array_unique(explode("\n", $name_ary));
 880  
 881                          $default = request_var('default', 0);
 882  
 883                          // Add user/s to group
 884                          if ($error = group_user_add($group_id, false, $name_ary, $group_row['group_name'], $default, 0, 0, $group_row))
 885                          {
 886                              trigger_error($user->lang[$error] . $return_page);
 887                          }
 888  
 889                          trigger_error($user->lang['GROUP_USERS_ADDED'] . $return_page);
 890  
 891                      break;
 892  
 893                      default:
 894                          $user->add_lang('acp/common');
 895  
 896                          $sql = 'SELECT g.group_id, g.group_name, g.group_desc, g.group_desc_uid, g.group_desc_bitfield, g.group_desc_options, g.group_type, ug.group_leader
 897                              FROM ' . GROUPS_TABLE . ' g, ' . USER_GROUP_TABLE . ' ug
 898                              WHERE ug.user_id = ' . $user->data['user_id'] . '
 899                                  AND g.group_id = ug.group_id
 900                                  AND ug.group_leader = 1
 901                              ORDER BY g.group_type DESC, g.group_name';
 902                          $result = $db->sql_query($sql);
 903  
 904                          while ($value = $db->sql_fetchrow($result))
 905                          {
 906                              $template->assign_block_vars('leader', array(
 907                                  'GROUP_NAME'    => ($value['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $value['group_name']] : $value['group_name'],
 908                                  'GROUP_DESC'    => generate_text_for_display($value['group_desc'], $value['group_desc_uid'], $value['group_desc_bitfield'], $value['group_desc_options']),
 909                                  'GROUP_TYPE'    => $value['group_type'],
 910                                  'GROUP_ID'        => $value['group_id'],
 911  
 912                                  'U_LIST'    => $this->u_action . "&amp;action=list&amp;g={$value['group_id']}",
 913                                  'U_EDIT'    => $this->u_action . "&amp;action=edit&amp;g={$value['group_id']}")
 914                              );
 915                          }
 916                          $db->sql_freeresult($result);
 917  
 918                      break;
 919                  }
 920  
 921              break;
 922          }
 923  
 924          $this->tpl_name = 'ucp_groups_' . $mode;
 925      }
 926  }
 927  
 928  ?>


Generated: Wed Nov 22 00:35:05 2006 Cross-referenced by PHPXref 0.6