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  ?>