posting_attachments.php
来自「这是php编的论坛的原代码」· PHP 代码 · 共 1,621 行 · 第 1/4 页
PHP
1,621 行
<?php
/***************************************************************************
* posting_attachments.php
* -------------------
* begin : Monday, Jul 15, 2002
* copyright : (C) 2002 Meik Sievertsen
* email : acyd.burn@gmx.de
*
* $Id: posting_attachments.php,v 1.1.1.1 2003/02/11 22:27:31 wei.gao Exp $
*
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
if ( !defined('IN_PHPBB') )
{
die('Hacking attempt');
exit;
}
//
// Base Class for Attaching
//
class attach_parent
{
var $post_attach = FALSE;
var $attach_filename = '';
var $filename = '';
var $type = '';
var $extension = '';
var $file_comment = '';
var $num_attachments = 0; // number of attachments in message
var $filesize = 0;
var $filetime = 0;
var $thumbnail = 0;
var $page = -1; // On which page we are on ? This should be filled by child classes.
// Switches
var $add_attachment_body = 0;
var $posted_attachments_body = 0;
//
// Constructor
//
function attach_parent()
{
global $HTTP_POST_VARS, $HTTP_POST_FILES;
if (!empty($HTTP_POST_VARS['add_attachment_body']))
{
$this->add_attachment_body = intval($HTTP_POST_VARS['add_attachment_body']);
}
if (!empty($HTTP_POST_VARS['posted_attachments_body']))
{
$this->posted_attachments_body = intval($HTTP_POST_VARS['posted_attachments_body']);
}
$this->file_comment = ( isset($HTTP_POST_VARS['filecomment']) ) ? trim( strip_tags($HTTP_POST_VARS['filecomment'])) : '';
$this->filename = ( $HTTP_POST_FILES['fileupload']['name'] != 'none' ) ? trim( $HTTP_POST_FILES['fileupload']['name'] ) : '';
$this->attachment_list = ( isset($HTTP_POST_VARS['attachment_list']) ) ? $HTTP_POST_VARS['attachment_list'] : array();
$this->attachment_comment_list = ( isset($HTTP_POST_VARS['comment_list']) ) ? $HTTP_POST_VARS['comment_list'] : array();
$this->attachment_filename_list = ( isset($HTTP_POST_VARS['filename_list']) ) ? $HTTP_POST_VARS['filename_list'] : array();
$this->attachment_extension_list = ( isset($HTTP_POST_VARS['extension_list']) ) ? $HTTP_POST_VARS['extension_list'] : array();
$this->attachment_mimetype_list = ( isset($HTTP_POST_VARS['mimetype_list']) ) ? $HTTP_POST_VARS['mimetype_list'] : array();
$this->attachment_filesize_list = ( isset($HTTP_POST_VARS['filesize_list']) ) ? $HTTP_POST_VARS['filesize_list'] : array();
$this->attachment_filetime_list = ( isset($HTTP_POST_VARS['filetime_list']) ) ? $HTTP_POST_VARS['filetime_list'] : array();
$this->attachment_id_list = ( isset($HTTP_POST_VARS['attach_id_list']) ) ? $HTTP_POST_VARS['attach_id_list'] : array();
$this->attachment_thumbnail_list = ( isset($HTTP_POST_VARS['attach_thumbnail_list']) ) ? $HTTP_POST_VARS['attach_thumbnail_list'] : array();
}
//
// Get Quota Limits
//
function get_quota_limits($user_id = -1)
{
global $userdata, $attach_config, $db;
//
// Define Filesize Limits (Prepare Quota Settings)
// Priority: Group, User, Management
//
// This method is somewhat query intensive, but i think because this one is only executed while attaching a file,
// it does not make much sense to come up with an new db-entry.
// Maybe i will change this in a future version, where you are able to disable the User Quota Feature at all (using
// Default Limits for all Users/Groups)
//
// Change this to 'user;group' if you want to have first priority on user quota settings.
$priority = 'group;user';
if ( $userdata['user_level'] == ADMIN )
{
$attach_config['pm_filesize_limit'] = 0; // Unlimited
$attach_config['upload_filesize_limit'] = 0; // Unlimited
return;
}
if ($this->page == PAGE_PRIVMSGS)
{
$quota_type = QUOTA_PM_LIMIT;
$limit_type = 'pm_filesize_limit';
$default = 'max_filesize_pm';
}
else
{
$quota_type = QUOTA_UPLOAD_LIMIT;
$limit_type = 'upload_filesize_limit';
$default = 'attachment_quota';
}
if ($user_id == -1)
{
$user_id = $userdata['user_id'];
}
$priority = explode(';', $priority);
$found = FALSE;
for ($i = 0; $i < count($priority); $i++)
{
if (($priority[$i] == 'group') && (!$found))
{
//
// Get Group Quota, if we find one, we have our quota
//
$sql = "SELECT u.group_id FROM " . USER_GROUP_TABLE . " u, " . GROUPS_TABLE . " g
WHERE (g.group_single_user = 0) AND (u.group_id = g.group_id) AND (u.user_id = " . $user_id . ")";
if ( !($result = attach_sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get User Group', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numrows($result) > 0)
{
$rows = $db->sql_fetchrowset($result);
$group_id = array();
for ($j = 0; $j < count($rows); $j++)
{
$group_id[] = $rows[$j]['group_id'];
}
$sql = "SELECT l.quota_limit FROM " . QUOTA_TABLE . " q, " . QUOTA_LIMITS_TABLE . " l
WHERE (q.group_id IN (" . implode(',', $group_id) . ")) AND (q.group_id <> 0) AND (q.quota_type = " . $quota_type . ")
AND (q.quota_limit_id = l.quota_limit_id) ORDER BY l.quota_limit DESC LIMIT 1";
if ( !($result = attach_sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get Group Quota', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numrows($result) > 0)
{
$row = $db->sql_fetchrow($result);
$attach_config[$limit_type] = $row['quota_limit'];
$found = TRUE;
}
}
}
if (($priority[$i] == 'user') && (!$found))
{
//
// Get User Quota, if the user is not in a group or the group has no quotas
//
$sql = "SELECT l.quota_limit FROM " . QUOTA_TABLE . " q, " . QUOTA_LIMITS_TABLE . " l
WHERE (q.user_id = " . $user_id . ") AND (q.user_id <> 0) AND (q.quota_type = " . $quota_type . ")
AND (q.quota_limit_id = l.quota_limit_id) LIMIT 1";
if ( !($result = attach_sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get User Quota', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numrows($result) > 0)
{
$row = $db->sql_fetchrow($result);
$attach_config[$limit_type] = $row['quota_limit'];
$found = TRUE;
}
}
}
if (!$found)
{
// Set Default Quota Limit
$quota_id = ($quota_type == QUOTA_UPLOAD_LIMIT) ? intval($attach_config['default_upload_quota']) : intval($attach_config['default_pm_quota']);
if ($quota_id == 0)
{
$attach_config[$limit_type] = $attach_config[$default];
}
else
{
$sql = "SELECT quota_limit FROM " . QUOTA_LIMITS_TABLE . "
WHERE quota_limit_id = " . $quota_id . " LIMIT 1";
if ( !($result = attach_sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not get Default Quota Limit', '', __LINE__, __FILE__, $sql);
}
if ($db->sql_numrows($result) > 0)
{
$row = $db->sql_fetchrow($result);
$attach_config[$limit_type] = $row['quota_limit'];
}
else
{
$attach_config[$limit_type] = $attach_config[$default];
}
}
}
// Never exceed the complete Attachment Upload Quota
if ($quota_type == QUOTA_UPLOAD_LIMIT)
{
if (intval($attach_config[$limit_type]) > intval($attach_config[$default]))
{
$attach_config[$limit_type] = $attach_config[$default];
}
}
}
//
// Handle all modes... (intern)
//
function handle_attachments($mode)
{
global $is_auth, $attach_config, $refresh, $HTTP_POST_VARS, $post_id, $submit, $preview, $error, $error_msg, $lang, $template, $userdata, $db;
//
// ok, what shall we do ;)
//
//
// Some adjustments for PM's
//
if ($this->page == PAGE_PRIVMSGS)
{
global $privmsg_id;
$post_id = $privmsg_id;
if ($mode == 'post')
{
$mode = 'newtopic';
}
else if ($mode == 'edit')
{
$mode = 'editpost';
}
if ( $userdata['user_level'] == ADMIN )
{
$is_auth['auth_attachments'] = '1';
$is_auth['auth_read'] = TRUE;
$max_attachments = ADMIN_MAX_ATTACHMENTS;
}
else
{
$is_auth['auth_attachments'] = intval($attach_config['allow_pm_attach']);
$is_auth['auth_read'] = TRUE;
$max_attachments = intval($attach_config['max_attachments_pm']);
}
}
else
{
if ( $userdata['user_level'] == ADMIN )
{
$max_attachments = ADMIN_MAX_ATTACHMENTS;
}
else
{
$max_attachments = intval($attach_config['max_attachments']);
}
}
//
// nothing, if the user is not authorized or attachment mod disabled
//
if ( (intval($attach_config['disable_mod'])) || (!( ($is_auth['auth_attachments']) && ($is_auth['auth_read']))) )
{
return (FALSE);
}
//
// Init Vars
//
$attachments = array();
if (!$refresh)
{
$add = ( isset($HTTP_POST_VARS['add_attachment']) ) ? TRUE : FALSE;
$delete = ( isset($HTTP_POST_VARS['del_attachment']) ) ? TRUE : FALSE;
$edit = ( isset($HTTP_POST_VARS['edit_comment']) ) ? TRUE : FALSE;
$update_attachment = ( isset($HTTP_POST_VARS['update_attachment']) ) ? TRUE : FALSE;
$del_thumbnail = ( isset($HTTP_POST_VARS['del_thumbnail']) ) ? TRUE : FALSE;
$add_attachment_box = ( !empty($HTTP_POST_VARS['add_attachment_box']) ) ? TRUE : FALSE;
$posted_attachments_box = ( !empty($HTTP_POST_VARS['posted_attachments_box']) ) ? TRUE : FALSE;
$refresh = $add || $delete || $edit || $del_thumbnail || $update_attachment || $add_attachment_box || $posted_attachment_box;
}
//
// Get Attachments
//
if ($this->page == PAGE_PRIVMSGS)
{
$attachments = get_attachments_from_pm($post_id);
}
else
{
$attachments = get_attachments_from_post($post_id);
}
if ($this->page == PAGE_PRIVMSGS)
{
if ( $userdata['user_level'] == ADMIN )
{
$auth = TRUE;
}
else
{
$auth = ( intval($attach_config['allow_pm_attach']) ) ? TRUE : FALSE;
}
if (count($attachments) == 1)
{
$template->assign_block_vars('switch_attachments',array());
$template->assign_vars(array(
'L_DELETE_ATTACHMENTS' => $lang['Delete_attachment'])
);
}
else if (count($attachments) > 0)
{
$template->assign_block_vars('switch_attachments',array());
$template->assign_vars(array(
'L_DELETE_ATTACHMENTS' => $lang['Delete_attachments'])
);
}
}
else
{
$auth = ( $is_auth['auth_edit'] || $is_auth['auth_mod'] ) ? TRUE : FALSE;
}
if ( (!$submit) && ($mode == 'editpost') && ( $auth ))
{
if ( (!$refresh) && (!$preview) && (!$error) && (!isset($HTTP_POST_VARS['del_poll_option'])) )
{
for ($i = 0; $i < count($attachments); $i++)
{
$this->attachment_list[] = $attachments[$i]['physical_filename'];
$this->attachment_comment_list[] = $attachments[$i]['comment'];
$this->attachment_filename_list[] = $attachments[$i]['real_filename'];
$this->attachment_extension_list[] = $attachments[$i]['extension'];
$this->attachment_mimetype_list[] = $attachments[$i]['mimetype'];
$this->attachment_filesize_list[] = $attachments[$i]['filesize'];
$this->attachment_filetime_list[] = $attachments[$i]['filetime'];
$this->attachment_id_list[] = $attachments[$i]['attach_id'];
$this->attachment_thumbnail_list[] = $attachments[$i]['thumbnail'];
}
}
}
$this->num_attachments = count($this->attachment_list);
if( ($submit) && ($mode != 'vote') )
{
if ( $mode == 'newtopic' || $mode == 'reply' || $mode == 'editpost' )
{
if ( $this->filename != '' )
{
if ( $this->num_attachments < intval($max_attachments) )
{
$this->upload_attachment($this->page);
if ( (!$error) && ($this->post_attach) )
{
array_unshift($this->attachment_list, $this->attach_filename);
array_unshift($this->attachment_comment_list, $this->file_comment);
array_unshift($this->attachment_filename_list, $this->filename);
array_unshift($this->attachment_extension_list, $this->extension);
array_unshift($this->attachment_mimetype_list, $this->type);
array_unshift($this->attachment_filesize_list, $this->filesize);
array_unshift($this->attachment_filetime_list, $this->filetime);
array_unshift($this->attachment_id_list, '-1');
array_unshift($this->attachment_thumbnail_list, $this->thumbnail);
$this->file_comment = '';
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?