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_main.php

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


001  <?php
002  /**
003  *
004  * @package ucp
005  * @version $Id$
006  * @copyright (c) 2005 phpBB Group
007  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
008  *
009  */
010   
011  /**
012  * @ignore
013  */
014  if (!defined('IN_PHPBB'))
015  {
016      exit;
017  }
018   
019  /**
020  * ucp_main
021  * UCP Front Panel
022  * @package ucp
023  */
024  class ucp_main
025  {
026      var $p_master;
027      var $u_action;
028      
029      function ucp_main(&$p_master)
030      {
031          $this->p_master = &$p_master;
032      }
033   
034      function main($id, $mode)
035      {
036          global $config, $db, $user, $auth, $template, $phpbb_root_path, $phpEx;
037   
038          switch ($mode)
039          {
040              case 'front':
041   
042                  $user->add_lang('memberlist');
043   
044                  $sql_from = TOPICS_TABLE . ' t ';
045                  $sql_select = '';
046   
047                  if ($config['load_db_track'])
048                  {
049                      $sql_from .= ' LEFT JOIN ' . TOPICS_POSTED_TABLE . ' tp ON (tp.topic_id = t.topic_id
050                          AND tp.user_id = ' . $user->data['user_id'] . ')';
051                      $sql_select .= ', tp.topic_posted';
052                  }
053   
054                  if ($config['load_db_lastread'])
055                  {
056                      $sql_from .= ' LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.topic_id = t.topic_id
057                          AND tt.user_id = ' . $user->data['user_id'] . ')';
058                      $sql_select .= ', tt.mark_time';
059                  }
060   
061                  $topic_type = $user->lang['VIEW_TOPIC_GLOBAL'];
062                  $folder = 'global_read';
063                  $folder_new = 'global_unread';
064   
065                  // Get cleaned up list... return only those forums not having the f_read permission
066                  $forum_ary = $auth->acl_getf('!f_read', true);
067                  $forum_ary = array_unique(array_keys($forum_ary));
068   
069                  // Determine first forum the user is able to read into - for global announcement link
070                  $sql = 'SELECT forum_id
071                      FROM ' . FORUMS_TABLE . '
072                      WHERE forum_type = ' . FORUM_POST;
073      
074                  if (sizeof($forum_ary))
075                  {
076                      $sql .= ' AND ' . $db->sql_in_set('forum_id', $forum_ary, true);
077                  }
078                  $result = $db->sql_query_limit($sql, 1);
079                  $g_forum_id = (int) $db->sql_fetchfield('forum_id');
080                  $db->sql_freeresult($result);
081   
082                  $sql = "SELECT t.* $sql_select
083                      FROM $sql_from
084                      WHERE t.forum_id = 0
085                          AND t.topic_type = " . POST_GLOBAL . '
086                      ORDER BY t.topic_last_post_time DESC';
087   
088                  $topic_list = $rowset = array();
089                  // If the user can't see any forums, he can't read any posts because fid of 0 is invalid
090                  if ($g_forum_id)
091                  {
092                      $result = $db->sql_query($sql);
093   
094                      while ($row = $db->sql_fetchrow($result))
095                      {
096                          $topic_list[] = $row['topic_id'];
097                          $rowset[$row['topic_id']] = $row;
098                      }
099                      $db->sql_freeresult($result);
100                  }
101   
102                  $topic_tracking_info = array();
103                  if ($config['load_db_lastread'])
104                  {
105                      $topic_tracking_info = get_topic_tracking(0, $topic_list, $rowset, false, $topic_list);
106                  }
107                  else
108                  {
109                      $topic_tracking_info = get_complete_topic_tracking(0, $topic_list, $topic_list);
110                  }
111   
112                  foreach ($topic_list as $topic_id)
113                  {
114                      $row = &$rowset[$topic_id];
115   
116                      $forum_id = $row['forum_id'];
117                      $topic_id = $row['topic_id'];
118   
119                      $unread_topic = (isset($topic_tracking_info[$topic_id]) && $row['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
120   
121                      $folder_img = ($unread_topic) ? $folder_new : $folder;
122                      $folder_alt = ($unread_topic) ? 'NEW_POSTS' : (($row['topic_status'] == ITEM_LOCKED) ? 'TOPIC_LOCKED' : 'NO_NEW_POSTS');
123   
124                      if ($row['topic_status'] == ITEM_LOCKED)
125                      {
126                          $folder_img .= '_locked';
127                      }
128   
129                      // Posted image?
130                      if (!empty($row['topic_posted']) && $row['topic_posted'])
131                      {
132                          $folder_img .= '_mine';
133                      }
134   
135                      $template->assign_block_vars('topicrow', array(
136                          'FORUM_ID'                    => $forum_id,
137                          'TOPIC_ID'                    => $topic_id,
138                          'TOPIC_AUTHOR'                => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
139                          'TOPIC_AUTHOR_COLOUR'        => get_username_string('colour', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
140                          'TOPIC_AUTHOR_FULL'            => get_username_string('full', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
141                          'FIRST_POST_TIME'            => $user->format_date($row['topic_time']),
142                          'LAST_POST_SUBJECT'            => censor_text($row['topic_last_post_subject']),
143                          'LAST_POST_TIME'            => $user->format_date($row['topic_last_post_time']),
144                          'LAST_VIEW_TIME'            => $user->format_date($row['topic_last_view_time']),
145                          'LAST_POST_AUTHOR'            => get_username_string('username', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
146                          'LAST_POST_AUTHOR_COLOUR'    => get_username_string('colour', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
147                          'LAST_POST_AUTHOR_FULL'        => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
148                          'TOPIC_TITLE'                => censor_text($row['topic_title']),
149                          'TOPIC_TYPE'                => $topic_type,
150   
151                          'TOPIC_FOLDER_IMG'        => $user->img($folder_img, $folder_alt),
152                          'TOPIC_FOLDER_IMG_SRC'    => $user->img($folder_img, $folder_alt, false, '', 'src'),
153                          'ATTACH_ICON_IMG'        => ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id) && $row['topic_attachment']) ? $user->img('icon_topic_attach', '') : '',
154   
155                          'S_USER_POSTED'        => (!empty($row['topic_posted']) && $row['topic_posted']) ? true : false,
156                          'S_UNREAD'            => $unread_topic,
157   
158                          'U_TOPIC_AUTHOR'        => get_username_string('profile', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
159                          'U_LAST_POST'            => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$g_forum_id&amp;t=$topic_id&amp;p=" . $row['topic_last_post_id']) . '#p' . $row['topic_last_post_id'],
160                          'U_LAST_POST_AUTHOR'    => get_username_string('profile', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
161                          'U_NEWEST_POST'            => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$g_forum_id&amp;t=$topic_id&amp;view=unread") . '#unread',
162                          'U_VIEW_TOPIC'            => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$g_forum_id&amp;t=$topic_id"))
163                      );
164                  }
165   
166                  if ($config['load_user_activity'])
167                  {
168                      if (!function_exists('display_user_activity'))
169                      {
170                          include_once($phpbb_root_path . 'includes/functions_display.' . $phpEx);
171                      }
172                      display_user_activity($user->data);
173                  }
174   
175                  // Do the relevant calculations
176                  $memberdays = max(1, round((time() - $user->data['user_regdate']) / 86400));
177                  $posts_per_day = $user->data['user_posts'] / $memberdays;
178                  $percentage = ($config['num_posts']) ? min(100, ($user->data['user_posts'] / $config['num_posts']) * 100) : 0;
179   
180                  $template->assign_vars(array(
181                      'USER_COLOR'        => (!empty($user->data['user_colour'])) ? $user->data['user_colour'] : '',
182                      'JOINED'            => $user->format_date($user->data['user_regdate']),
183                      'VISITED'            => (empty($last_visit)) ? ' - ' : $user->format_date($last_visit),
184                      'WARNINGS'            => ($user->data['user_warnings']) ? $user->data['user_warnings'] : 0,
185                      'POSTS'                => ($user->data['user_posts']) ? $user->data['user_posts'] : 0,
186                      'POSTS_DAY'            => sprintf($user->lang['POST_DAY'], $posts_per_day),
187                      'POSTS_PCT'            => sprintf($user->lang['POST_PCT'], $percentage),
188   
189                      'OCCUPATION'    => (!empty($row['user_occ'])) ? $row['user_occ'] : '',
190                      'INTERESTS'        => (!empty($row['user_interests'])) ? $row['user_interests'] : '',
191   
192  //                    'S_GROUP_OPTIONS'    => $group_options,
193   
194                      'U_SEARCH_USER'        => ($auth->acl_get('u_search')) ? append_sid("{$phpbb_root_path}search.$phpEx", 'author_id=' . $user->data['user_id'] . '&amp;sr=posts') : '',
195                  ));
196   
197              break;
198   
199              case 'subscribed':
200   
201                  include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
202   
203                  $user->add_lang('viewforum');
204   
205                  add_form_key('ucp_front_subscribed');
206   
207                  $unwatch = (isset($_POST['unwatch'])) ? true : false;
208   
209                  if ($unwatch)
210                  {
211                      if (check_form_key('ucp_front_subscribed'))
212                      {
213                          $forums = array_keys(request_var('f', array(0 => 0)));
214                          $topics = array_keys(request_var('t', array(0 => 0)));
215                          $msg = '';
216   
217                          if (sizeof($forums) || sizeof($topics))
218                          {
219                              $l_unwatch = '';
220                              if (sizeof($forums))
221                              {
222                                  $sql = 'DELETE FROM ' . FORUMS_WATCH_TABLE . '
223                                      WHERE ' . $db->sql_in_set('forum_id', $forums) . '
224                                          AND user_id = ' . $user->data['user_id'];
225                                  $db->sql_query($sql);
226   
227                                  $l_unwatch .= '_FORUMS';
228                              }
229   
230                              if (sizeof($topics))
231                              {
232                                  $sql = 'DELETE FROM ' . TOPICS_WATCH_TABLE . '
233                                      WHERE ' . $db->sql_in_set('topic_id', $topics) . '
234                                          AND user_id = ' . $user->data['user_id'];
235                                  $db->sql_query($sql);
236   
237                                  $l_unwatch .= '_TOPICS';
238                              }
239                              $msg = $user->lang['UNWATCHED' . $l_unwatch];
240   
241                          }
242                      }
243                      else
244                      {
245                          $msg = $user->lang['FORM_INVALID'];
246                      }
247                      $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&amp;mode=subscribed") . '">', '</a>');
248                      meta_refresh(3, append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&amp;mode=subscribed"));
249                      trigger_error($message);
250                  }
251   
252                  $forbidden_forums = array();
253   
254                  if ($config['allow_forum_notify'])
255                  {
256                      $forbidden_forums = $auth->acl_getf('!f_read', true);
257                      $forbidden_forums = array_unique(array_keys($forbidden_forums));
258                      
259                      $sql_array = array(
260                          'SELECT'    => 'f.*',
261   
262                          'FROM'        => array(
263                              FORUMS_WATCH_TABLE    => 'fw',
264                              FORUMS_TABLE        => 'f'
265                          ),
266   
267                          'WHERE'        => 'fw.user_id = ' . $user->data['user_id'] . '
268                              AND f.forum_id = fw.forum_id
269                              AND ' . $db->sql_in_set('f.forum_id', $forbidden_forums, true, true),
270   
271                          'ORDER_BY'    => 'left_id'
272                      );
273   
274                      if ($config['load_db_lastread'])
275                      {
276                          $sql_array['LEFT_JOIN'] = array(
277                              array(
278                                  'FROM'    => array(FORUMS_TRACK_TABLE => 'ft'),
279                                  'ON'    => 'ft.user_id = ' . $user->data['user_id'] . ' AND ft.forum_id = f.forum_id'
280                              )
281                          );
282   
283                          $sql_array['SELECT'] .= ', ft.mark_time ';
284                      }
285                      else
286                      {
287                          $tracking_topics = (isset($_COOKIE[$config['cookie_name'] . '_track'])) ? ((STRIP) ? stripslashes($_COOKIE[$config['cookie_name'] . '_track']) : $_COOKIE[$config['cookie_name'] . '_track']) : '';
288                          $tracking_topics = ($tracking_topics) ? tracking_unserialize($tracking_topics) : array();
289                      }
290   
291                      $sql = $db->sql_build_query('SELECT', $sql_array);
292                      $result = $db->sql_query($sql);
293   
294                      while ($row = $db->sql_fetchrow($result))
295                      {
296                          $forum_id = $row['forum_id'];
297   
298                          if ($config['load_db_lastread'])
299                          {
300                              $forum_check = (!empty($row['mark_time'])) ? $row['mark_time'] : $user->data['user_lastmark'];
301                          }
302                          else
303                          {
304                              $forum_check = (isset($tracking_topics['f'][$forum_id])) ? (int) (base_convert($tracking_topics['f'][$forum_id], 36, 10) + $config['board_startdate']) : $user->data['user_lastmark'];
305                          }
306   
307                          $unread_forum = ($row['forum_last_post_time'] > $forum_check) ? true : false;
308   
309                          // Which folder should we display?
310                          if ($row['forum_status'] == ITEM_LOCKED)
311                          {
312                              $folder_image = ($unread_forum) ? 'forum_unread_locked' : 'forum_read_locked';
313                              $folder_alt = 'FORUM_LOCKED';
314                          }
315                          else
316                          {
317                              $folder_image = ($unread_forum) ? 'forum_unread' : 'forum_read';
318                              $folder_alt = ($unread_forum) ? 'NEW_POSTS' : 'NO_NEW_POSTS';
319                          }
320   
321                          // Create last post link information, if appropriate
322                          if ($row['forum_last_post_id'])
323                          {
324                              $last_post_time = $user->format_date($row['forum_last_post_time']);
325                              $last_post_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;p=" . $row['forum_last_post_id']) . '#p' . $row['forum_last_post_id'];
326                          }
327                          else
328                          {
329                              $last_post_time = $last_post_url = '';
330                          }
331   
332                          $template->assign_block_vars('forumrow', array(
333                              'FORUM_ID'                => $forum_id,
334                              'FORUM_FOLDER_IMG'        => $user->img($folder_image, $folder_alt),
335                              'FORUM_FOLDER_IMG_SRC'    => $user->img($folder_image, $folder_alt, false, '', 'src'),
336                              'FORUM_IMAGE'            => ($row['forum_image']) ? '<img src="' . $phpbb_root_path . $row['forum_image'] . '" alt="' . $user->lang[$folder_alt] . '" />' : '',
337                              'FORUM_IMAGE_SRC'        => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '',
338                              'FORUM_NAME'            => $row['forum_name'],
339                              'LAST_POST_SUBJECT'        => $row['forum_last_post_subject'],
340                              'LAST_POST_TIME'        => $last_post_time,
341   
342                              'LAST_POST_AUTHOR'            => get_username_string('username', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']),
343                              'LAST_POST_AUTHOR_COLOUR'    => get_username_string('colour', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']),
344                              'LAST_POST_AUTHOR_FULL'        => get_username_string('full', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']),
345                              'U_LAST_POST_AUTHOR'        => get_username_string('profile', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']),
346   
347                              'U_LAST_POST'            => $last_post_url,
348                              'U_VIEWFORUM'            => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $row['forum_id']))
349                          );
350                      }
351                      $db->sql_freeresult($result);
352                  }
353   
354                  // Subscribed Topics
355                  if ($config['allow_topic_notify'])
356                  {
357                      if (empty($forbidden_forums))
358                      {
359                          $forbidden_forums = $auth->acl_getf('!f_read', true);
360                          $forbidden_forums = array_unique(array_keys($forbidden_forums));
361                      }
362                      $this->assign_topiclist('subscribed', $forbidden_forums);
363                  }
364   
365                  $template->assign_vars(array(
366                      'S_TOPIC_NOTIFY'        => $config['allow_topic_notify'],
367                      'S_FORUM_NOTIFY'        => $config['allow_forum_notify'],
368                  ));
369   
370              break;
371   
372              case 'bookmarks':
373   
374                  if (!$config['allow_bookmarks'])
375                  {
376                      $template->assign_vars(array(
377                          'S_NO_DISPLAY_BOOKMARKS'    => true)
378                      );
379                      break;
380                  }
381   
382                  include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
383   
384                  $user->add_lang('viewforum');
385   
386                  if (isset($_POST['unbookmark']))
387                  {
388                      $s_hidden_fields = array('unbookmark' => 1);
389                      $topics = (isset($_POST['t'])) ? array_keys(request_var('t', array(0 => 0))) : array();
390                      $url = $this->u_action;
391   
392                      if (!sizeof($topics))
393                      {
394                          trigger_error('NO_BOOKMARKS_SELECTED');
395                      }
396   
397                      foreach ($topics as $topic_id)
398                      {
399                          $s_hidden_fields['t'][$topic_id] = 1;
400                      }
401   
402                      if (confirm_box(true))
403                      {
404                          $sql = 'DELETE FROM ' . BOOKMARKS_TABLE . '
405                              WHERE user_id = ' . $user->data['user_id'] . '
406                                  AND ' . $db->sql_in_set('topic_id', $topics);
407                          $db->sql_query($sql);
408   
409                          meta_refresh(3, $url);
410                          $message = $user->lang['BOOKMARKS_REMOVED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $url . '">', '</a>');
411                          trigger_error($message);
412                      }
413                      else
414                      {
415                          confirm_box(false, 'REMOVE_SELECTED_BOOKMARKS', build_hidden_fields($s_hidden_fields));
416                      }
417                  }
418                  $forbidden_forums = $auth->acl_getf('!f_read', true);
419                  $forbidden_forums = array_unique(array_keys($forbidden_forums));
420                  
421                  $this->assign_topiclist('bookmarks', $forbidden_forums);
422   
423              break;
424   
425              case 'drafts':
426   
427                  $pm_drafts = ($this->p_master->p_name == 'pm') ? true : false;
428                  $template->assign_var('S_SHOW_DRAFTS', true);
429   
430                  $user->add_lang('posting');
431   
432                  $edit        = (isset($_REQUEST['edit'])) ? true : false;
433                  $submit        = (isset($_POST['submit'])) ? true : false;
434                  $draft_id    = ($edit) ? intval($_REQUEST['edit']) : 0;
435                  $delete        = (isset($_POST['delete'])) ? true : false;
436   
437                  $s_hidden_fields = ($edit) ? '<input type="hidden" name="edit" value="' . $draft_id . '" />' : '';
438                  $draft_subject = $draft_message = '';
439                  add_form_key('ucp_draft');
440   
441                  if ($delete)
442                  {
443                      if (check_form_key('ucp_draft'))
444                      {
445                          $drafts = array_keys(request_var('d', array(0 => 0)));
446   
447                          if (sizeof($drafts))
448                          {
449                              $sql = 'DELETE FROM ' . DRAFTS_TABLE . '
450                                  WHERE ' . $db->sql_in_set('draft_id', $drafts) . '
451                                      AND user_id = ' . $user->data['user_id'];
452                              $db->sql_query($sql);
453                          }
454                          $msg = $user->lang['DRAFTS_DELETED'];
455                          unset($drafts);
456                      }
457                      else
458                      {
459                          $msg = $user->lang['FORM_INVALID'];
460                      }
461                      $message = $msg . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
462                      meta_refresh(3, $this->u_action);
463                      trigger_error($message);
464                  }
465   
466                  if ($submit && $edit)
467                  {
468                      $draft_subject = utf8_normalize_nfc(request_var('subject', '', true));
469                      $draft_message = utf8_normalize_nfc(request_var('message', '', true));
470                      if (check_form_key('ucp_draft'))
471                      {
472                          if ($draft_message && $draft_subject)
473                          {
474                              $draft_row = array(
475                                  'draft_subject' => $draft_subject,
476                                  'draft_message' => $draft_message
477                              );
478   
479                              $sql = 'UPDATE ' . DRAFTS_TABLE . '
480                                  SET ' . $db->sql_build_array('UPDATE', $draft_row) . "
481                                  WHERE draft_id = $draft_id
482                                      AND user_id = " . $user->data['user_id'];
483                              $db->sql_query($sql);
484   
485                              $message = $user->lang['DRAFT_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
486   
487                              meta_refresh(3, $this->u_action);
488                              trigger_error($message);
489                          }
490                          else
491                          {
492                              $template->assign_var('ERROR', ($draft_message == '') ? $user->lang['EMPTY_DRAFT'] : (($draft_subject == '') ? $user->lang['EMPTY_DRAFT_TITLE'] : ''));
493                          }
494                      }
495                      else
496                      {
497                          $template->assign_var('ERROR', $user->lang['FORM_INVALID']);
498                      }
499                  }
500   
501                  if (!$pm_drafts)
502                  {
503                      $sql = 'SELECT d.*, f.forum_name
504                          FROM ' . DRAFTS_TABLE . ' d, ' . FORUMS_TABLE . ' f
505                          WHERE d.user_id = ' . $user->data['user_id'] . ' ' .
506                              (($edit) ? "AND d.draft_id = $draft_id" : '') . '
507                              AND f.forum_id = d.forum_id
508                          ORDER BY d.save_time DESC';
509                  }
510                  else
511                  {
512                      $sql = 'SELECT * FROM ' . DRAFTS_TABLE . '
513                          WHERE user_id = ' . $user->data['user_id'] . ' ' .
514                              (($edit) ? "AND draft_id = $draft_id" : '') . '
515                              AND forum_id = 0
516                              AND topic_id = 0
517                          ORDER BY save_time DESC';
518                  }
519                  $result = $db->sql_query($sql);
520   
521                  $draftrows = $topic_ids = array();
522   
523                  while ($row = $db->sql_fetchrow($result))
524                  {
525                      if ($row['topic_id'])
526                      {
527                          $topic_ids[] = (int) $row['topic_id'];
528                      }
529                      $draftrows[] = $row;
530                  }
531                  $db->sql_freeresult($result);
532   
533                  if (sizeof($topic_ids))
534                  {
535                      $sql = 'SELECT topic_id, forum_id, topic_title
536                          FROM ' . TOPICS_TABLE . '
537                          WHERE ' . $db->sql_in_set('topic_id', array_unique($topic_ids));
538                      $result = $db->sql_query($sql);
539   
540                      while ($row = $db->sql_fetchrow($result))
541                      {
542                          $topic_rows[$row['topic_id']] = $row;
543                      }
544                      $db->sql_freeresult($result);
545                  }
546                  unset($topic_ids);
547   
548                  $template->assign_var('S_EDIT_DRAFT', $edit);
549   
550                  $row_count = 0;
551                  foreach ($draftrows as $draft)
552                  {
553                      $link_topic = $link_forum = $link_pm = false;
554                      $insert_url = $view_url = $title = '';
555   
556                      if (isset($topic_rows[$draft['topic_id']]) && $auth->acl_get('f_read', $topic_rows[$draft['topic_id']]['forum_id']))
557                      {
558                          $link_topic = true;
559                          $view_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $topic_rows[$draft['topic_id']]['forum_id'] . '&amp;t=' . $draft['topic_id']);
560                          $title = $topic_rows[$draft['topic_id']]['topic_title'];
561   
562                          $insert_url = append_sid("{$phpbb_root_path}posting.$phpEx", 'f=' . $topic_rows[$draft['topic_id']]['forum_id'] . '&amp;t=' . $draft['topic_id'] . '&amp;mode=reply&amp;d=' . $draft['draft_id']);
563                      }
564                      else if ($auth->acl_get('f_read', $draft['forum_id']))
565                      {
566                          $link_forum = true;
567                          $view_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $draft['forum_id']);
568                          $title = $draft['forum_name'];
569   
570                          $insert_url = append_sid("{$phpbb_root_path}posting.$phpEx", 'f=' . $draft['forum_id'] . '&amp;mode=post&amp;d=' . $draft['draft_id']);
571                      }
572                      else if ($pm_drafts)
573                      {
574                          $link_pm = true;
575                          $insert_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&amp;mode=compose&amp;d=" . $draft['draft_id']);
576                      }
577   
578                      $template_row = array(
579                          'DATE'            => $user->format_date($draft['save_time']),
580                          'DRAFT_MESSAGE'    => ($submit) ? $draft_message : $draft['draft_message'],
581                          'DRAFT_SUBJECT'    => ($submit) ? $draft_subject : $draft['draft_subject'],
582                          'TITLE'            => $title,
583   
584                          'DRAFT_ID'    => $draft['draft_id'],
585                          'FORUM_ID'    => $draft['forum_id'],
586                          'TOPIC_ID'    => $draft['topic_id'],
587   
588                          'U_VIEW'        => $view_url,
589                          'U_VIEW_EDIT'    => $this->u_action . '&amp;edit=' . $draft['draft_id'],
590                          'U_INSERT'        => $insert_url,
591   
592                          'S_LINK_TOPIC'        => $link_topic,
593                          'S_LINK_FORUM'        => $link_forum,
594                          'S_LINK_PM'            => $link_pm,
595                          'S_HIDDEN_FIELDS'    => $s_hidden_fields
596                      );
597                      $row_count++;
598   
599                      ($edit) ? $template->assign_vars($template_row) : $template->assign_block_vars('draftrow', $template_row);
600                  }
601   
602                  if (!$edit)
603                  {
604                      $template->assign_var('S_DRAFT_ROWS', $row_count);
605                  }
606   
607              break;
608          }
609   
610   
611          $template->assign_vars(array(
612              'L_TITLE'            => $user->lang['UCP_MAIN_' . strtoupper($mode)],
613   
614              'S_DISPLAY_MARK_ALL'    => ($mode == 'watched' || ($mode == 'drafts' && !isset($_GET['edit']))) ? true : false,
615              'S_HIDDEN_FIELDS'        => (isset($s_hidden_fields)) ? $s_hidden_fields : '',
616              'S_UCP_ACTION'            => $this->u_action,
617   
618              'LAST_POST_IMG'            => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'),
619              'NEWEST_POST_IMG'        => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'),
620          ));
621   
622          // Set desired template
623          $this->tpl_name = 'ucp_main_' . $mode;
624          $this->page_title = 'UCP_MAIN_' . strtoupper($mode);
625      }
626   
627      /**
628      * Build and assign topiclist for bookmarks/subscribed topics
629      */
630      function assign_topiclist($mode = 'subscribed', $forbidden_forum_ary = array())
631      {
632          global $user, $db, $template, $config, $auth, $phpbb_root_path, $phpEx;
633   
634          $table = ($mode == 'subscribed') ? TOPICS_WATCH_TABLE : BOOKMARKS_TABLE;
635          $start = request_var('start', 0);
636   
637          $sql_array = array(
638              'SELECT'    => 'COUNT(t.topic_id) as topics_count',
639   
640              'FROM'        => array(
641                  $table            => 'i',
642                  TOPICS_TABLE    => 't'
643              ),
644   
645              'WHERE'        =>    'i.topic_id = t.topic_id
646                  AND i.user_id = ' . $user->data['user_id'] . '
647                  AND ' . $db->sql_in_set('t.forum_id', $forbidden_forum_ary, true, true),
648          );
649          $sql = $db->sql_build_query('SELECT', $sql_array);
650          $result = $db->sql_query($sql);
651          $topics_count = (int) $db->sql_fetchfield('topics_count');
652          $db->sql_freeresult($result);
653   
654          if ($topics_count)
655          {
656              $template->assign_vars(array(
657                  'PAGINATION'    => generate_pagination($this->u_action, $topics_count, $config['topics_per_page'], $start),
658                  'PAGE_NUMBER'    => on_page($topics_count, $config['topics_per_page'], $start),
659                  'TOTAL_TOPICS'    => ($topics_count == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $topics_count))
660              );
661          }
662   
663          if ($mode == 'subscribed')
664          {
665              $sql_array = array(
666                  'SELECT'    => 't.*, f.forum_name',
667   
668                  'FROM'        => array(
669                      TOPICS_WATCH_TABLE    => 'tw',
670                      TOPICS_TABLE        => 't'
671                  ),
672   
673                  'WHERE'        => 'tw.user_id = ' . $user->data['user_id'] . '
674                      AND t.topic_id = tw.topic_id
675                      AND ' . $db->sql_in_set('t.forum_id', $forbidden_forum_ary, true, true),
676                      
677   
678                  'ORDER_BY'    => 't.topic_last_post_time DESC'
679              );
680   
681              $sql_array['LEFT_JOIN'] = array();
682          }
683          else
684          {
685              $sql_array = array(
686                  'SELECT'    => 't.*, f.forum_name, b.topic_id as b_topic_id',
687   
688                  'FROM'        => array(
689                      BOOKMARKS_TABLE        => 'b',
690                  ),
691   
692                  'WHERE'        => 'b.user_id = ' . $user->data['user_id'] . '
693                      AND ' . $db->sql_in_set('f.forum_id', $forbidden_forum_ary, true, true),
694   
695                  'ORDER_BY'    => 't.topic_last_post_time DESC'
696              );
697   
698              $sql_array['LEFT_JOIN'] = array();
699              $sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'b.topic_id = t.topic_id');
700          }
701   
702          $sql_array['LEFT_JOIN'][] = array('FROM' => array(FORUMS_TABLE => 'f'), 'ON' => 't.forum_id = f.forum_id');
703   
704          if ($config['load_db_lastread'])
705          {
706              $sql_array['LEFT_JOIN'][] = array('FROM' => array(FORUMS_TRACK_TABLE => 'ft'), 'ON' => 'ft.forum_id = t.forum_id AND ft.user_id = ' . $user->data['user_id']);
707              $sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_TRACK_TABLE => 'tt'), 'ON' => 'tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id']);
708              $sql_array['SELECT'] .= ', tt.mark_time, ft.mark_time AS forum_mark_time';
709          }
710   
711          if ($config['load_db_track'])
712          {
713              $sql_array['LEFT_JOIN'][] = array('FROM' => array(TOPICS_POSTED_TABLE => 'tp'), 'ON' => 'tp.topic_id = t.topic_id AND tp.user_id = ' . $user->data['user_id']);
714              $sql_array['SELECT'] .= ', tp.topic_posted';
715          }
716   
717          $sql = $db->sql_build_query('SELECT', $sql_array);
718          $result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
719   
720          $topic_list = $topic_forum_list = $global_announce_list = $rowset = array();
721          while ($row = $db->sql_fetchrow($result))
722          {
723              $topic_id = (isset($row['b_topic_id'])) ? $row['b_topic_id'] : $row['topic_id'];
724   
725              $topic_list[] = $topic_id;
726              $rowset[$topic_id] = $row;
727   
728              $topic_forum_list[$row['forum_id']]['forum_mark_time'] = ($config['load_db_lastread']) ? $row['forum_mark_time'] : 0;
729              $topic_forum_list[$row['forum_id']]['topics'][] = $topic_id;
730   
731              if ($row['topic_type'] == POST_GLOBAL)
732              {
733                  $global_announce_list[] = $topic_id;
734              }
735          }
736          $db->sql_freeresult($result);
737   
738          $topic_tracking_info = array();
739          if ($config['load_db_lastread'])
740          {
741              foreach ($topic_forum_list as $f_id => $topic_row)
742              {
743                  $topic_tracking_info += get_topic_tracking($f_id, $topic_row['topics'], $rowset, array($f_id => $topic_row['forum_mark_time']), ($f_id == 0) ? $global_announce_list : false);
744              }
745          }
746          else
747          {
748              foreach ($topic_forum_list as $f_id => $topic_row)
749              {
750                  $topic_tracking_info += get_complete_topic_tracking($f_id, $topic_row['topics'], $global_announce_list);
751              }
752          }
753   
754          foreach ($topic_list as $topic_id)
755          {
756              $row = &$rowset[$topic_id];
757   
758              $forum_id = $row['forum_id'];
759              $topic_id = (isset($row['b_topic_id'])) ? $row['b_topic_id'] : $row['topic_id'];
760   
761              $unread_topic = (isset($topic_tracking_info[$topic_id]) && $row['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
762   
763              // Replies
764              $replies = ($auth->acl_get('m_approve', $forum_id)) ? $row['topic_replies_real'] : $row['topic_replies'];
765   
766              if ($row['topic_status'] == ITEM_MOVED && !empty($row['topic_moved_id']))
767              {
768                  $topic_id = $row['topic_moved_id'];
769              }
770   
771              // Get folder img, topic status/type related information
772              $folder_img = $folder_alt = $topic_type = '';
773              topic_status($row, $replies, $unread_topic, $folder_img, $folder_alt, $topic_type);
774   
775              $view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id");
776   
777              // Send vars to template
778              $template->assign_block_vars('topicrow', array(
779                  'FORUM_ID'                    => $forum_id,
780                  'TOPIC_ID'                    => $topic_id,
781                  'FIRST_POST_TIME'            => $user->format_date($row['topic_time']),
782                  'LAST_POST_SUBJECT'            => $row['topic_last_post_subject'],
783                  'LAST_POST_TIME'            => $user->format_date($row['topic_last_post_time']),
784                  'LAST_VIEW_TIME'            => $user->format_date($row['topic_last_view_time']),
785   
786                  'TOPIC_AUTHOR'                => get_username_string('username', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
787                  'TOPIC_AUTHOR_COLOUR'        => get_username_string('colour', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
788                  'TOPIC_AUTHOR_FULL'            => get_username_string('full', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
789                  'U_TOPIC_AUTHOR'            => get_username_string('profile', $row['topic_poster'], $row['topic_first_poster_name'], $row['topic_first_poster_colour']),
790   
791                  'LAST_POST_AUTHOR'            => get_username_string('username', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
792                  'LAST_POST_AUTHOR_COLOUR'    => get_username_string('colour', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
793                  'LAST_POST_AUTHOR_FULL'        => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
794                  'U_LAST_POST_AUTHOR'        => get_username_string('profile', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']),
795   
796                  'S_DELETED_TOPIC'    => (!$row['topic_id']) ? true : false,
797                  'S_GLOBAL_TOPIC'    => (!$forum_id) ? true : false,
798   
799                  'PAGINATION'        => topic_generate_pagination($replies, append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . "&amp;t=$topic_id")),
800                  'REPLIES'            => $replies,
801                  'VIEWS'                => $row['topic_views'],
802                  'TOPIC_TITLE'        => censor_text($row['topic_title']),
803                  'TOPIC_TYPE'        => $topic_type,
804                  'FORUM_NAME'        => $row['forum_name'],
805   
806                  'TOPIC_FOLDER_IMG'        => $user->img($folder_img, $folder_alt),
807                  'TOPIC_FOLDER_IMG_SRC'    => $user->img($folder_img, $folder_alt, false, '', 'src'),
808                  'TOPIC_ICON_IMG'        => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['img'] : '',
809                  'TOPIC_ICON_IMG_WIDTH'    => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['width'] : '',
810                  'TOPIC_ICON_IMG_HEIGHT'    => (!empty($icons[$row['icon_id']])) ? $icons[$row['icon_id']]['height'] : '',
811                  'ATTACH_ICON_IMG'        => ($auth->acl_get('u_download') && $auth->acl_get('f_download', $forum_id) && $row['topic_attachment']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '',
812   
813                  'S_TOPIC_TYPE'            => $row['topic_type'],
814                  'S_USER_POSTED'            => (!empty($row['topic_posted'])) ? true : false,
815                  'S_UNREAD_TOPIC'        => $unread_topic,
816   
817                  'U_NEWEST_POST'            => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&amp;t=$topic_id&amp;view=unread") . '#unread',
818                  'U_LAST_POST'            => $view_topic_url . '&amp;p=' . $row['topic_last_post_id'] . '#p' . $row['topic_last_post_id'],
819                  'U_VIEW_TOPIC'            => $view_topic_url,
820                  'U_VIEW_FORUM'            => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id),
821              ));
822          }
823      }
824  }
825   
826  ?>