Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

      (Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

ucp_pm.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 12.80 KiB


 001  <?php
 002  /**
 003  * @package ucp
 004  * @version $Id$
 005  * @copyright (c) 2005 phpBB Group
 006  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 007  *
 008  */
 009   
 010  /**
 011  * @ignore
 012  */
 013  if (!defined('IN_PHPBB'))
 014  {
 015      exit;
 016  }
 017   
 018  /**
 019  * Private Message Class
 020  *
 021  * $_REQUEST['folder'] display folder with the id used
 022  * $_REQUEST['folder'] inbox|outbox|sentbox display folder with the associated name
 023  *
 024  *    Display Messages (default to inbox) - mode=view
 025  *    Display single message - mode=view&p=[msg_id] or &p=[msg_id] (short linkage)
 026  *
 027  *    if the folder id with (&f=[folder_id]) is used when displaying messages, one query will be saved. If it is not used, phpBB needs to grab
 028  *    the folder id first in order to display the input boxes and folder names and such things. ;) phpBB always checks this against the database to make
 029  *    sure the user is able to view the message.
 030  *
 031  *    Composing Messages (mode=compose):
 032  *        To specific user (u=[user_id])
 033  *        To specific group (g=[group_id])
 034  *        Quoting a post (action=quotepost&p=[post_id])
 035  *        Quoting a PM (action=quote&p=[msg_id])
 036  *        Forwarding a PM (action=forward&p=[msg_id])
 037  *
 038  * @package ucp
 039  */
 040  class ucp_pm
 041  {
 042      var $u_action;
 043   
 044      function main($id, $mode)
 045      {
 046          global $user, $template, $phpbb_root_path, $auth, $phpEx, $db, $config;
 047   
 048          if (!$user->data['is_registered'])
 049          {
 050              trigger_error('NO_MESSAGE');
 051          }
 052   
 053          // Is PM disabled?
 054          if (!$config['allow_privmsg'])
 055          {
 056              trigger_error('PM_DISABLED');
 057          }
 058   
 059          $user->add_lang('posting');
 060          $template->assign_var('S_PRIVMSGS', true);
 061   
 062          // Folder directly specified?
 063          $folder_specified = request_var('folder', '');
 064   
 065          if (!in_array($folder_specified, array('inbox', 'outbox', 'sentbox')))
 066          {
 067              $folder_specified = (int) $folder_specified;
 068          }
 069          else
 070          {
 071              $folder_specified = ($folder_specified == 'inbox') ? PRIVMSGS_INBOX : (($folder_specified == 'outbox') ? PRIVMSGS_OUTBOX : PRIVMSGS_SENTBOX);
 072          }
 073   
 074          if (!$folder_specified)
 075          {
 076              $mode = (!$mode) ? request_var('mode', 'view') : $mode;
 077          }
 078          else
 079          {
 080              $mode = 'view';
 081          }
 082   
 083          include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
 084   
 085          switch ($mode)
 086          {
 087              // New private messages popup
 088              case 'popup':
 089   
 090                  $l_new_message = '';
 091                  if ($user->data['is_registered'])
 092                  {
 093                      if ($user->data['user_new_privmsg'])
 094                      {
 095                          $l_new_message = ($user->data['user_new_privmsg'] == 1 ) ? $user->lang['YOU_NEW_PM'] : $user->lang['YOU_NEW_PMS'];
 096                      }
 097                      else
 098                      {
 099                          $l_new_message = $user->lang['YOU_NO_NEW_PM'];
 100                      }
 101                  }
 102   
 103                  $template->assign_vars(array(
 104                      'MESSAGE'            => $l_new_message,
 105                      'S_NOT_LOGGED_IN'    => ($user->data['user_id'] == ANONYMOUS) ? true : false,
 106                      'CLICK_TO_VIEW'        => sprintf($user->lang['CLICK_VIEW_PRIVMSG'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox') . '" onclick="jump_to_inbox(this.href); return false;">', '</a>'),
 107                      'U_INBOX'            => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&amp;folder=inbox'),
 108                      'UA_INBOX'            => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox', false))
 109                  );
 110   
 111                  $tpl_file = 'ucp_pm_popup';
 112              break;
 113   
 114              // Compose message
 115              case 'compose':
 116                  $action = request_var('action', 'post');
 117   
 118                  get_folder($user->data['user_id']);
 119   
 120                  if (!$auth->acl_get('u_sendpm'))
 121                  {
 122                      trigger_error('NO_AUTH_SEND_MESSAGE');
 123                  }
 124   
 125                  include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx);
 126                  compose_pm($id, $mode, $action);
 127   
 128                  $tpl_file = 'posting_body';
 129              break;
 130   
 131              case 'options':
 132                  $sql = 'SELECT group_message_limit
 133                      FROM ' . GROUPS_TABLE . '
 134                      WHERE group_id = ' . $user->data['group_id'];
 135                  $result = $db->sql_query($sql, 3600);
 136                  $message_limit = (int) $db->sql_fetchfield('group_message_limit');
 137                  $db->sql_freeresult($result);
 138   
 139                  $user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit;
 140   
 141                  get_folder($user->data['user_id']);
 142   
 143                  include($phpbb_root_path . 'includes/ucp/ucp_pm_options.' . $phpEx);
 144                  message_options($id, $mode, $global_privmsgs_rules, $global_rule_conditions);
 145   
 146                  $tpl_file = 'ucp_pm_options';
 147              break;
 148   
 149              case 'drafts':
 150   
 151                  get_folder($user->data['user_id']);
 152                  $this->p_name = 'pm';
 153   
 154                  // Call another module... please do not try this at home... Hoochie Coochie Man
 155                  include($phpbb_root_path . 'includes/ucp/ucp_main.' . $phpEx);
 156   
 157                  $module = new ucp_main($this);
 158                  $module->u_action = $this->u_action;
 159                  $module->main($id, $mode);
 160   
 161                  $this->tpl_name = $module->tpl_name;
 162                  $this->page_title = 'UCP_PM_DRAFTS';
 163   
 164                  unset($module);
 165                  return;
 166   
 167              break;
 168   
 169              case 'view':
 170   
 171                  $sql = 'SELECT group_message_limit
 172                      FROM ' . GROUPS_TABLE . '
 173                      WHERE group_id = ' . $user->data['group_id'];
 174                  $result = $db->sql_query($sql, 3600);
 175                  $message_limit = (int) $db->sql_fetchfield('group_message_limit');
 176                  $db->sql_freeresult($result);
 177   
 178                  $user->data['message_limit'] = (!$message_limit) ? $config['pm_max_msgs'] : $message_limit;
 179   
 180                  if ($folder_specified)
 181                  {
 182                      $folder_id = $folder_specified;
 183                      $action = 'view_folder';
 184                  }
 185                  else
 186                  {
 187                      $folder_id = request_var('f', PRIVMSGS_NO_BOX);
 188                      $action = request_var('action', 'view_folder');
 189                  }
 190   
 191                  $msg_id = request_var('p', 0);
 192                  $view    = request_var('view', '');
 193   
 194                  // View message if specified
 195                  if ($msg_id)
 196                  {
 197                      $action = 'view_message';
 198                  }
 199   
 200                  if (!$auth->acl_get('u_readpm'))
 201                  {
 202                      trigger_error('NO_AUTH_READ_MESSAGE');
 203                  }
 204   
 205                  // Do not allow hold messages to be seen
 206                  if ($folder_id == PRIVMSGS_HOLD_BOX)
 207                  {
 208                      trigger_error('NO_AUTH_READ_HOLD_MESSAGE');
 209                  }
 210   
 211   
 212                  // First Handle Mark actions and moving messages
 213                  $submit_mark    = (isset($_POST['submit_mark'])) ? true : false;
 214                  $move_pm        = (isset($_POST['move_pm'])) ? true : false;
 215                  $mark_option    = request_var('mark_option', '');
 216                  $dest_folder    = request_var('dest_folder', PRIVMSGS_NO_BOX);
 217   
 218                  // Is moving PM triggered through mark options?
 219                  if (!in_array($mark_option, array('mark_important', 'delete_marked')) && $submit_mark)
 220                  {
 221                      $move_pm = true;
 222                      $dest_folder = (int) $mark_option;
 223                      $submit_mark = false;
 224                  }
 225   
 226                  // Move PM
 227                  if ($move_pm)
 228                  {
 229                      $move_msg_ids    = (isset($_POST['marked_msg_id'])) ? request_var('marked_msg_id', array(0)) : array();
 230                      $cur_folder_id    = request_var('cur_folder_id', PRIVMSGS_NO_BOX);
 231   
 232                      if (move_pm($user->data['user_id'], $user->data['message_limit'], $move_msg_ids, $dest_folder, $cur_folder_id))
 233                      {
 234                          // Return to folder view if single message moved
 235                          if ($action == 'view_message')
 236                          {
 237                              $msg_id        = 0;
 238                              $folder_id    = request_var('cur_folder_id', PRIVMSGS_NO_BOX);
 239                              $action        = 'view_folder';
 240                          }
 241                      }
 242                  }
 243   
 244                  // Message Mark Options
 245                  if ($submit_mark)
 246                  {
 247                      handle_mark_actions($user->data['user_id'], $mark_option);
 248                  }
 249   
 250                  // If new messages arrived, place them into the appropriate folder
 251                  $num_not_moved = $num_removed = 0;
 252                  $release = request_var('release', 0);
 253   
 254                  if ($user->data['user_new_privmsg'] && $action == 'view_folder')
 255                  {
 256                      $return = place_pm_into_folder($global_privmsgs_rules, $release);
 257                      $num_not_moved = $return['not_moved'];
 258                      $num_removed = $return['removed'];
 259                  }
 260   
 261                  if (!$msg_id && $folder_id == PRIVMSGS_NO_BOX)
 262                  {
 263                      $folder_id = PRIVMSGS_INBOX;
 264                  }
 265                  else if ($msg_id && $folder_id == PRIVMSGS_NO_BOX)
 266                  {
 267                      $sql = 'SELECT folder_id
 268                          FROM ' . PRIVMSGS_TO_TABLE . "
 269                          WHERE msg_id = $msg_id
 270                              AND folder_id <> " . PRIVMSGS_NO_BOX . '
 271                              AND user_id = ' . $user->data['user_id'];
 272                      $result = $db->sql_query($sql);
 273                      $row = $db->sql_fetchrow($result);
 274                      $db->sql_freeresult($result);
 275   
 276                      if (!$row)
 277                      {
 278                          trigger_error('NO_MESSAGE');
 279                      }
 280                      $folder_id = (int) $row['folder_id'];
 281                  }
 282   
 283                  $message_row = array();
 284                  if ($action == 'view_message' && $msg_id)
 285                  {
 286                      // Get Message user want to see
 287                      if ($view == 'next' || $view == 'previous')
 288                      {
 289                          $sql_condition = ($view == 'next') ? '>' : '<';
 290                          $sql_ordering = ($view == 'next') ? 'ASC' : 'DESC';
 291   
 292                          $sql = 'SELECT t.msg_id
 293                              FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . PRIVMSGS_TABLE . " p2
 294                              WHERE p2.msg_id = $msg_id
 295                                  AND t.folder_id = $folder_id
 296                                  AND t.user_id = " . $user->data['user_id'] . "
 297                                  AND t.msg_id = p.msg_id
 298                                  AND p.message_time $sql_condition p2.message_time
 299                              ORDER BY p.message_time $sql_ordering";
 300                          $result = $db->sql_query_limit($sql, 1);
 301                          $row = $db->sql_fetchrow($result);
 302                          $db->sql_freeresult($result);
 303   
 304                          if (!$row)
 305                          {
 306                              $message = ($view == 'next') ? 'NO_NEWER_PM' : 'NO_OLDER_PM';
 307                              trigger_error($message);
 308                          }
 309                          else
 310                          {
 311                              $msg_id = $row['msg_id'];
 312                          }
 313                      }
 314   
 315                      $sql = 'SELECT t.*, p.*, u.*
 316                          FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . ' u
 317                          WHERE t.user_id = ' . $user->data['user_id'] . "
 318                              AND p.author_id = u.user_id
 319                              AND t.folder_id = $folder_id
 320                              AND t.msg_id = p.msg_id
 321                              AND p.msg_id = $msg_id";
 322                      $result = $db->sql_query($sql);
 323                      $message_row = $db->sql_fetchrow($result);
 324                      $db->sql_freeresult($result);
 325   
 326                      if (!$message_row)
 327                      {
 328                          trigger_error('NO_MESSAGE');
 329                      }
 330   
 331                      // Update unread status
 332                      update_unread_status($message_row['pm_unread'], $message_row['msg_id'], $user->data['user_id'], $folder_id);
 333                  }
 334   
 335                  $folder = get_folder($user->data['user_id'], $folder_id);
 336   
 337                  $s_folder_options = $s_to_folder_options = '';
 338                  foreach ($folder as $f_id => $folder_ary)
 339                  {
 340                      $option = '<option' . ((!in_array($f_id, array(PRIVMSGS_INBOX, PRIVMSGS_OUTBOX, PRIVMSGS_SENTBOX))) ? ' class="sep"' : '') . ' value="' . $f_id . '"' . (($f_id == $folder_id) ? ' selected="selected"' : '') . '>' . $folder_ary['folder_name'] . (($folder_ary['unread_messages']) ? ' [' . $folder_ary['unread_messages'] . '] ' : '') . '</option>';
 341   
 342                      $s_to_folder_options .= ($f_id != PRIVMSGS_OUTBOX && $f_id != PRIVMSGS_SENTBOX) ? $option : '';
 343                      $s_folder_options .= $option;
 344                  }
 345                  clean_sentbox($folder[PRIVMSGS_SENTBOX]['num_messages']);
 346   
 347                  // Header for message view - folder and so on
 348                  $folder_status = get_folder_status($folder_id, $folder);
 349   
 350                  $template->assign_vars(array(
 351                      'CUR_FOLDER_ID'            => $folder_id,
 352                      'CUR_FOLDER_NAME'        => $folder_status['folder_name'],
 353                      'NUM_NOT_MOVED'            => $num_not_moved,
 354                      'NUM_REMOVED'            => $num_removed,
 355                      'RELEASE_MESSAGE_INFO'    => sprintf($user->lang['RELEASE_MESSAGES'], '<a href="' . $this->u_action . '&amp;folder=' . $folder_id . '&amp;release=1">', '</a>'),
 356                      'NOT_MOVED_MESSAGES'    => ($num_not_moved == 1) ? $user->lang['NOT_MOVED_MESSAGE'] : sprintf($user->lang['NOT_MOVED_MESSAGES'], $num_not_moved),
 357                      'RULE_REMOVED_MESSAGES'    => ($num_removed == 1) ? $user->lang['RULE_REMOVED_MESSAGE'] : sprintf($user->lang['RULE_REMOVED_MESSAGES'], $num_removed),
 358   
 359                      'S_FOLDER_OPTIONS'        => $s_folder_options,
 360                      'S_TO_FOLDER_OPTIONS'    => $s_to_folder_options,
 361                      'S_FOLDER_ACTION'        => $this->u_action . '&amp;action=view_folder',
 362                      'S_PM_ACTION'            => $this->u_action . '&amp;action=' . $action,
 363   
 364                      'U_INBOX'                => $this->u_action . '&amp;folder=inbox',
 365                      'U_OUTBOX'                => $this->u_action . '&amp;folder=outbox',
 366                      'U_SENTBOX'                => $this->u_action . '&amp;folder=sentbox',
 367                      'U_CREATE_FOLDER'        => $this->u_action . '&amp;mode=options',
 368                      'U_CURRENT_FOLDER'        => $this->u_action . '&amp;folder=' . $folder_id,
 369   
 370                      'S_IN_INBOX'            => ($folder_id == PRIVMSGS_INBOX) ? true : false,
 371                      'S_IN_OUTBOX'            => ($folder_id == PRIVMSGS_OUTBOX) ? true : false,
 372                      'S_IN_SENTBOX'            => ($folder_id == PRIVMSGS_SENTBOX) ? true : false,
 373   
 374                      'FOLDER_STATUS'                => $folder_status['message'],
 375                      'FOLDER_MAX_MESSAGES'        => $folder_status['max'],
 376                      'FOLDER_CUR_MESSAGES'        => $folder_status['cur'],
 377                      'FOLDER_REMAINING_MESSAGES'    => $folder_status['remaining'],
 378                      'FOLDER_PERCENT'            => $folder_status['percent'])
 379                  );
 380   
 381                  if ($action == 'view_folder')
 382                  {
 383                      include($phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx);
 384                      view_folder($id, $mode, $folder_id, $folder);
 385   
 386                      $tpl_file = 'ucp_pm_viewfolder';
 387                  }
 388                  else if ($action == 'view_message')
 389                  {
 390                      $template->assign_vars(array(
 391                          'S_VIEW_MESSAGE'    => true,
 392                          'MSG_ID'            => $msg_id)
 393                      );
 394   
 395                      if (!$msg_id)
 396                      {
 397                          trigger_error('NO_MESSAGE');
 398                      }
 399   
 400                      include($phpbb_root_path . 'includes/ucp/ucp_pm_viewmessage.' . $phpEx);
 401                      view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row);
 402   
 403                      $tpl_file = ($view == 'print') ? 'ucp_pm_viewmessage_print' : 'ucp_pm_viewmessage';
 404                  }
 405   
 406              break;
 407   
 408              default:
 409                  trigger_error('NO_ACTION_MODE', E_USER_ERROR);
 410              break;
 411          }
 412   
 413          $template->assign_vars(array(
 414              'L_TITLE'            => $user->lang['UCP_PM_' . strtoupper($mode)],
 415              'S_UCP_ACTION'        => $this->u_action . ((isset($action)) ? "&amp;action=$action" : ''))
 416          );
 417   
 418          // Set desired template
 419          $this->tpl_name = $tpl_file;
 420          $this->page_title = 'UCP_PM_' . strtoupper($mode);
 421      }
 422  }
 423   
 424  ?>