home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 April / PCWorld_2005-04_cd.bin / akce / web / phpbb2plus / phpBB2_plus_1.52.exe / phpBB2 / uacp.php < prev    next >
PHP Script  |  2004-12-24  |  15KB  |  483 lines

  1. <?php
  2. /***************************************************************************
  3.  *                                 uacp.php
  4.  *                            -------------------
  5.  *   begin                : Oct 30, 2002
  6.  *   copyright            : (C) 2002 Meik Sievertsen
  7.  *   email                : acyd.burn@gmx.de
  8.  *
  9.  *   $Id: uacp.php,v 1.15 2004/10/31 16:46:59 acydburn Exp $
  10.  *
  11.  *
  12.  ***************************************************************************/
  13.  
  14. /***************************************************************************
  15.  *
  16.  *   This program is free software; you can redistribute it and/or modify
  17.  *   it under the terms of the GNU General Public License as published by
  18.  *   the Free Software Foundation; either version 2 of the License, or
  19.  *   (at your option) any later version.
  20.  *
  21.  ***************************************************************************/
  22.  
  23. /**
  24.  * User Attachment Control Panel
  25.  *
  26.  * From this 'Control Panel' the user is able to view/delete his Attachments.
  27.  */
  28.  
  29. define('IN_PHPBB', true);
  30. $phpbb_root_path = './';
  31. include($phpbb_root_path . 'extension.inc');
  32. include($phpbb_root_path . 'common.'.$phpEx);
  33.  
  34. // session id check
  35. $sid = get_var('sid', '');
  36.  
  37. // Start session management
  38. $userdata = session_pagestart($user_ip, PAGE_PROFILE);
  39. init_userprefs($userdata);
  40. // End session management
  41.  
  42. // session id check
  43. if ($sid == '' || $sid != $userdata['session_id'])
  44. {
  45.     message_die(GENERAL_ERROR, 'Invalid_session');
  46. }
  47.  
  48. // Obtain initial var settings
  49. $user_id = get_var(POST_USERS_URL, 0);
  50.  
  51. if (!$user_id)
  52. {
  53.     message_die(GENERAL_MESSAGE, $lang['No_user_id_specified']);
  54. }
  55.  
  56. $profiledata = get_userdata($user_id);
  57.  
  58. if ($profiledata['user_id'] != $userdata['user_id'] && $userdata['user_level'] != ADMIN)
  59. {
  60.     message_die(GENERAL_MESSAGE, $lang['Not_Authorised']);
  61. }
  62.  
  63. $page_title = $lang['User_acp_title'];
  64. include($phpbb_root_path . 'includes/page_header.'.$phpEx);
  65.  
  66. $language = $board_config['default_lang'];
  67.  
  68. if (!file_exists($phpbb_root_path . 'language/lang_' . $language . '/lang_admin_attach.'.$phpEx))
  69. {
  70.     $language = $attach_config['board_lang'];
  71. }
  72.  
  73. include($phpbb_root_path . 'language/lang_' . $language . '/lang_admin_attach.' . $phpEx);
  74.  
  75. $start = get_var('start', 0);
  76.  
  77. if (isset($HTTP_POST_VARS['order']))
  78. {
  79.     $sort_order = ($HTTP_POST_VARS['order'] == 'ASC') ? 'ASC' : 'DESC';
  80. }
  81. else if (isset($HTTP_GET_VARS['order']))
  82. {
  83.     $sort_order = ($HTTP_GET_VARS['order'] == 'ASC') ? 'ASC' : 'DESC';
  84. }
  85. else
  86. {
  87.     $sort_order = '';
  88. }
  89.  
  90. $mode = get_var('mode', '');
  91.  
  92. $mode_types_text = array($lang['Sort_Filename'], $lang['Sort_Comment'], $lang['Sort_Extension'], $lang['Sort_Size'], $lang['Sort_Downloads'], $lang['Sort_Posttime'], /*$lang['Sort_Posts']*/);
  93. $mode_types = array('real_filename', 'comment', 'extension', 'filesize', 'downloads', 'post_time'/*, 'posts'*/);
  94.  
  95. if (!$mode)
  96. {
  97.     $mode = 'real_filename';
  98.     $sort_order = 'ASC';
  99. }
  100.  
  101. //
  102. // Pagination ?
  103. //
  104. $do_pagination = true;
  105.  
  106. //
  107. // Set Order
  108. //
  109. $order_by = '';
  110.  
  111. switch ($mode)
  112. {
  113.     case 'filename':
  114.         $order_by = 'ORDER BY a.real_filename ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  115.         break;
  116.     case 'comment':
  117.         $order_by = 'ORDER BY a.comment ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  118.         break;
  119.     case 'extension':
  120.         $order_by = 'ORDER BY a.extension ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  121.         break;
  122.     case 'filesize':
  123.         $order_by = 'ORDER BY a.filesize ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  124.         break;
  125.     case 'downloads':
  126.         $order_by = 'ORDER BY a.download_count ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  127.         break;
  128.     case 'post_time':
  129.         $order_by = 'ORDER BY a.filetime ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  130.         break;
  131.     default:
  132.         $mode = 'a.real_filename';
  133.         $sort_order = 'ASC';
  134.         $order_by = 'ORDER BY a.real_filename ' . $sort_order . ' LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
  135.         break;
  136. }
  137.  
  138. //
  139. // Set select fields
  140. //
  141. if (sizeof($mode_types_text) > 0)
  142. {
  143.     $select_sort_mode = '<select name="mode">';
  144.  
  145.     for ($i = 0; $i < sizeof($mode_types_text); $i++)
  146.     {
  147.         $selected = ($mode == $mode_types[$i]) ? ' selected="selected"' : '';
  148.         $select_sort_mode .= '<option value="' . $mode_types[$i] . '"' . $selected . '>' . $mode_types_text[$i] . '</option>';
  149.     }
  150.     $select_sort_mode .= '</select>';
  151. }
  152.  
  153. if (!empty($sort_order))
  154. {
  155.     $select_sort_order = '<select name="order">';
  156.     if ($sort_order == 'ASC')
  157.     {
  158.         $select_sort_order .= '<option value="ASC" selected="selected">' . $lang['Sort_Ascending'] . '</option><option value="DESC">' . $lang['Sort_Descending'] . '</option>';
  159.     }
  160.     else
  161.     {
  162.         $select_sort_order .= '<option value="ASC">' . $lang['Sort_Ascending'] . '</option><option value="DESC" selected="selected">' . $lang['Sort_Descending'] . '</option>';
  163.     }
  164.     $select_sort_order .= '</select>';
  165. }
  166.  
  167. $delete = (isset($HTTP_POST_VARS['delete'])) ? true : false;
  168. $delete_id_list = (isset($HTTP_POST_VARS['delete_id_list'])) ? $HTTP_POST_VARS['delete_id_list'] : array();
  169.  
  170. $confirm = ($HTTP_POST_VARS['confirm']) ? true : false;
  171.  
  172. if ($confirm && sizeof($delete_id_list) > 0)
  173. {
  174.     $attachments = array();
  175.  
  176.     for ($i = 0; $i < sizeof($delete_id_list); $i++)
  177.     {
  178.         $sql = 'SELECT post_id, privmsgs_id 
  179.             FROM ' . ATTACHMENTS_TABLE . ' 
  180.             WHERE attach_id = ' . intval($delete_id_list[$i]) . '
  181.                 AND (user_id_1 = ' . intval($profiledata['user_id']) . '
  182.                     OR user_id_2 = ' . intval($profiledata['user_id']) . ')';
  183.         $result = $db->sql_query($sql);
  184.         if ($result)
  185.         {
  186.             $row = $db->sql_fetchrow($result);
  187.             if ($row['post_id'] != 0)
  188.             {
  189.                 delete_attachment(0, intval($delete_id_list[$i]));
  190.             }
  191.             else
  192.             {
  193.                 delete_attachment(0, intval($delete_id_list[$i]), PAGE_PRIVMSGS, intval($profiledata['user_id']));
  194.             }
  195.         }
  196.     }
  197. }
  198. else if ($delete && sizeof($delete_id_list) > 0)
  199. {
  200.     // Not confirmed, show confirmation message
  201.     $hidden_fields = '<input type="hidden" name="view" value="' . $view . '" />';
  202.     $hidden_fields .= '<input type="hidden" name="mode" value="' . $mode . '" />';
  203.     $hidden_fields .= '<input type="hidden" name="order" value="' . $sort_order . '" />';
  204.     $hidden_fields .= '<input type="hidden" name="' . POST_USERS_URL . '" value="' . intval($profiledata['user_id']) . '" />';
  205.     $hidden_fields .= '<input type="hidden" name="start" value="' . $start . '" />';
  206.     $hidden_fields .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';
  207.  
  208.     for ($i = 0; $i < sizeof($delete_id_list); $i++)
  209.     {
  210.         $hidden_fields .= '<input type="hidden" name="delete_id_list[]" value="' . intval($delete_id_list[$i]) . '" />';
  211.     }
  212.  
  213.     $template->set_filenames(array(
  214.         'confirm' => 'confirm_body.tpl')
  215.     );
  216.  
  217.     $template->assign_vars(array(
  218.         'MESSAGE_TITLE' => $lang['Confirm'],
  219.         'MESSAGE_TEXT' => $lang['Confirm_delete_attachments'],
  220.  
  221.         'L_YES' => $lang['Yes'],
  222.         'L_NO' => $lang['No'],
  223.  
  224.         'S_CONFIRM_ACTION' => append_sid($phpbb_root_path . 'uacp.' . $phpEx),
  225.         'S_HIDDEN_FIELDS' => $hidden_fields)
  226.     );
  227.  
  228.     $template->pparse('confirm');
  229.     
  230.     include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  231.  
  232.     exit;
  233. }
  234.  
  235. $hidden_fields = '';
  236.     
  237. $template->set_filenames(array(
  238.     'body' => 'uacp_body.tpl')
  239. );
  240.  
  241. $total_rows = 0;
  242.     
  243. $username = $profiledata['username'];
  244.  
  245. $s_hidden = '<input type="hidden" name="' . POST_USERS_URL . '" value="' . intval($profiledata['user_id']) . '">';
  246. $s_hidden .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';
  247.  
  248. //
  249. // Assign Template Vars
  250. //
  251. $template->assign_vars(array(
  252.     'L_SUBMIT' => $lang['Submit'],
  253.     'L_UACP' => $lang['UACP'],
  254.     'L_SELECT_SORT_METHOD' => $lang['Select_sort_method'],
  255.     'L_ORDER' => $lang['Order'],
  256.     'L_FILENAME' => $lang['File_name'],
  257.     'L_FILECOMMENT' => $lang['File_comment_cp'],
  258.     'L_EXTENSION' => $lang['Extension'],
  259.     'L_SIZE' => $lang['Size_in_kb'],
  260.     'L_DOWNLOADS' => $lang['Downloads'],
  261.     'L_POST_TIME' => $lang['Post_time'],
  262.     'L_POSTED_IN_TOPIC' => $lang['Posted_in_topic'],
  263.     'L_DELETE' => $lang['Delete'],
  264.     'L_DELETE_MARKED' => $lang['Delete_marked'],
  265.     'L_MARK_ALL' => $lang['Mark_all'],
  266.     'L_UNMARK_ALL' => $lang['Unmark_all'],
  267.  
  268.     'USERNAME' => $profiledata['username'],
  269.  
  270.     'S_USER_HIDDEN' => $s_hidden,
  271.     'S_MODE_ACTION' => append_sid('uacp.' . $phpEx),
  272.     'S_MODE_SELECT' => $select_sort_mode,
  273.     'S_ORDER_SELECT' => $select_sort_order)
  274. );
  275.  
  276. $sql = "SELECT attach_id 
  277.     FROM " . ATTACHMENTS_TABLE . "
  278.     WHERE user_id_1 = " . intval($profiledata['user_id']) . " OR user_id_2 = " . intval($profiledata['user_id']) . "
  279.     GROUP BY attach_id";
  280.         
  281. if ( !($result = $db->sql_query($sql)) )
  282. {
  283.     message_die(GENERAL_ERROR, 'Couldn\'t query attachments', '', __LINE__, __FILE__, $sql);
  284. }
  285.         
  286. $attach_ids = $db->sql_fetchrowset($result);
  287. $num_attach_ids = $db->sql_numrows($result);
  288. $total_rows = $num_attach_ids;
  289.  
  290. if ($num_attach_ids > 0)
  291. {
  292.     $attach_id = array();
  293.  
  294.     for ($j = 0; $j < $num_attach_ids; $j++)
  295.     {
  296.         $attach_id[] = (int) $attach_ids[$j]['attach_id'];
  297.     }
  298.             
  299.     $sql = "SELECT a.*
  300.         FROM " . ATTACHMENTS_DESC_TABLE . " a
  301.         WHERE a.attach_id IN (" . implode(', ', $attach_id) . ") " .
  302.         $order_by;
  303.         
  304.     if ( !($result = $db->sql_query($sql)) )
  305.     {
  306.         message_die(GENERAL_ERROR, "Couldn't query attachments", '', __LINE__, __FILE__, $sql);
  307.     }
  308.  
  309.     $attachments = $db->sql_fetchrowset($result);
  310.     $num_attach = $db->sql_numrows($result);
  311. }
  312. else
  313. {
  314.     $attachments = array();
  315. }
  316.  
  317. if (count($attachments) > 0)
  318. {
  319.     for ($i = 0; $i < count($attachments); $i++)
  320.     {
  321.         $row_color = ( !($i % 2) ) ? $theme['td_color1'] : $theme['td_color2'];
  322.         $row_class = ( !($i % 2) ) ? $theme['td_class1'] : $theme['td_class2'];
  323.  
  324.         //
  325.         // Is the Attachment assigned to more than one post ?
  326.         // If it's not assigned to any post, it's an private message thingy. ;)
  327.         //
  328.         $post_titles = array();
  329.  
  330.         $sql = "SELECT *
  331.             FROM " . ATTACHMENTS_TABLE . "
  332.             WHERE attach_id = " . (int) $attachments[$i]['attach_id'];
  333.  
  334.         if ( !($result = $db->sql_query($sql)) )
  335.         {
  336.             message_die(GENERAL_ERROR, 'Couldn\'t query attachments', '', __LINE__, __FILE__, $sql);
  337.         }
  338.  
  339.         $ids = $db->sql_fetchrowset($result);
  340.         $num_ids = $db->sql_numrows($result);
  341.  
  342.         for ($j = 0; $j < $num_ids; $j++)
  343.         {
  344.             if ($ids[$j]['post_id'] != 0)
  345.             {
  346.                 $sql = "SELECT t.topic_title
  347.                     FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
  348.                     WHERE p.post_id = " . (int) $ids[$j]['post_id'] . " AND p.topic_id = t.topic_id
  349.                     GROUP BY t.topic_id, t.topic_title";
  350.  
  351.                 if ( !($result = $db->sql_query($sql)) )
  352.                 {
  353.                     message_die(GENERAL_ERROR, 'Couldn\'t query topic', '', __LINE__, __FILE__, $sql);
  354.                 }
  355.  
  356.                 $row = $db->sql_fetchrow($result);
  357.                 $post_title = $row['topic_title'];
  358.  
  359.                 if (strlen($post_title) > 32)
  360.                 {
  361.                     $post_title = substr($post_title, 0, 30) . '...';
  362.                 }
  363.  
  364.                 $view_topic = append_sid($phpbb_root_path . 'viewtopic.' . $phpEx . '?' . POST_POST_URL . '=' . $ids[$j]['post_id'] . '#' . $ids[$j]['post_id']);
  365.  
  366.                 $post_titles[] = '<a href="' . $view_topic . '" class="gen" target="_blank">' . $post_title . '</a>';
  367.             }
  368.             else
  369.             {
  370.                 $desc = '';
  371.  
  372.                 $sql = "SELECT privmsgs_type, privmsgs_to_userid, privmsgs_from_userid
  373.                     FROM " . PRIVMSGS_TABLE . "
  374.                     WHERE privmsgs_id = " . (int) $ids[$j]['privmsgs_id'];
  375.  
  376.                 if ( !($result = $db->sql_query($sql)) )
  377.                 {
  378.                     message_die(GENERAL_ERROR, 'Couldn\'t get Privmsgs Type', '', __LINE__, __FILE__, $sql);
  379.                 }
  380.  
  381.                 if ($db->sql_numrows($result) != 0)
  382.                 {
  383.                     $row = $db->sql_fetchrow($result);
  384.                     $privmsgs_type = $row['privmsgs_type'];
  385.                                 
  386.                     if (($privmsgs_type == PRIVMSGS_READ_MAIL) || ($privmsgs_type == PRIVMSGS_NEW_MAIL) || ($privmsgs_type == PRIVMSGS_UNREAD_MAIL))
  387.                     {
  388.                         if ($row['privmsgs_to_userid'] == $profiledata['user_id'])
  389.                         {
  390.                             $desc = $lang['Private_Message'] . ' (' . $lang['Inbox'] . ')';
  391.                         }
  392.                     }
  393.                     else if ($privmsgs_type == PRIVMSGS_SENT_MAIL)
  394.                     {
  395.                         if ($row['privmsgs_from_userid'] == $profiledata['user_id'])
  396.                         {
  397.                             $desc = $lang['Private_Message'] . ' (' . $lang['Sentbox'] . ')';
  398.                         }
  399.                     }
  400.                     else if ( ($privmsgs_type == PRIVMSGS_SAVED_OUT_MAIL) )
  401.                     {
  402.                         if ($row['privmsgs_from_userid'] == $profiledata['user_id'])
  403.                         {
  404.                             $desc = $lang['Private_Message'] . ' (' . $lang['Savebox'] . ')';
  405.                         }
  406.                     }
  407.                     else if ( ($privmsgs_type == PRIVMSGS_SAVED_IN_MAIL) )
  408.                     {
  409.                         if ($row['privmsgs_to_userid'] == $profiledata['user_id'])
  410.                         {
  411.                             $desc = $lang['Private_Message'] . ' (' . $lang['Savebox'] . ')';
  412.                         }
  413.                     }
  414.  
  415.                     if ($desc != '')
  416.                     {
  417.                         $post_titles[] = $desc;
  418.                     }
  419.                 }
  420.             }
  421.         }
  422.  
  423.         // Iron out those Attachments assigned to us, but not more controlled by us. ;) (PM's)
  424.         if (count($post_titles) > 0)
  425.         {
  426.             $delete_box = '<input type="checkbox" name="delete_id_list[]" value="' . (int) $attachments[$i]['attach_id'] . '" />';
  427.  
  428.             for ($j = 0; $j < count($delete_id_list); $j++)
  429.             {
  430.                 if ($delete_id_list[$j] == $attachments[$i]['attach_id'])
  431.                 {
  432.                     $delete_box = '<input type="checkbox" name="delete_id_list[]" value="' . (int) $attachments[$i]['attach_id'] . '" checked />';
  433.                     break;
  434.                 }
  435.             }
  436.  
  437.             $post_titles = implode('<br />', $post_titles);
  438.  
  439.             $hidden_field = '<input type="hidden" name="attach_id_list[]" value="' . (int) $attachments[$i]['attach_id'] . '">';
  440.             $hidden_field .= '<input type="hidden" name="sid" value="' . $userdata['session_id'] . '" />';
  441.  
  442.             $template->assign_block_vars('attachrow', array(
  443.                 'ROW_NUMBER' => $i + ($start + 1 ),
  444.                 'ROW_COLOR' => '#' . $row_color,
  445.                 'ROW_CLASS' => $row_class,
  446.  
  447.                 'FILENAME' => $attachments[$i]['real_filename'],
  448.                 'COMMENT' => stripslashes(trim(nl2br($attachments[$i]['comment']))),
  449.                 'EXTENSION' => $attachments[$i]['extension'],
  450.                 'SIZE' => round(($attachments[$i]['filesize'] / MEGABYTE), 2),
  451.                 'DOWNLOAD_COUNT' => $attachments[$i]['download_count'],
  452.                 'POST_TIME' => create_date($board_config['default_dateformat'], $attachments[$i]['filetime'], $board_config['board_timezone']),
  453.                 'POST_TITLE' => $post_titles,
  454.  
  455.                 'S_DELETE_BOX' => $delete_box,
  456.                 'S_HIDDEN' => $hidden_field,
  457.                 'U_VIEW_ATTACHMENT' => append_sid($phpbb_root_path . 'download.' . $phpEx . '?id=' . $attachments[$i]['attach_id']))
  458.     //            'U_VIEW_POST' => ($attachments[$i]['post_id'] != 0) ? append_sid("../viewtopic." . $phpEx . "?" . POST_POST_URL . "=" . $attachments[$i]['post_id'] . "#" . $attachments[$i]['post_id']) : '')
  459.             );
  460.         }
  461.     }
  462. }
  463.  
  464. //
  465. // Generate Pagination
  466. //
  467. if ( ($do_pagination) && ($total_rows > $board_config['topics_per_page']) )
  468. {
  469.     $pagination = generate_pagination($phpbb_root_path . 'uacp.' . $phpEx . '?mode=' . $mode . '&order=' . $sort_order . '&' . POST_USERS_URL . '=' . $profiledata['user_id'] . '&sid=' . $userdata['session_id'], $total_rows, $board_config['topics_per_page'], $start).' ';
  470.  
  471.     $template->assign_vars(array(
  472.         'PAGINATION' => $pagination,
  473.         'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $total_rows / $board_config['topics_per_page'] )), 
  474.  
  475.         'L_GOTO_PAGE' => $lang['Goto_page'])
  476.     );
  477. }
  478.  
  479. $template->pparse('body');
  480.  
  481. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  482.  
  483. ?>