Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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:52 - Dateigröße: 12.30 KiB


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