DiscuzX/upload/source/class/forum/forum_upload.php

164 lines
5.5 KiB
PHP

<?php
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
*
* $Id: forum_upload.php 32858 2013-03-15 03:36:22Z zhangjie $
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class forum_upload {
var $uid;
var $aid;
var $simple;
var $statusid;
var $attach;
var $error_sizelimit;
var $getaid;
function forum_upload($getaid = 0) {
global $_G;
$_G['uid'] = $this->uid = intval($_GET['uid']);
$swfhash = md5(substr(md5($_G['config']['security']['authkey']), 8).$this->uid);
$this->aid = 0;
$this->getaid = $getaid;
$this->simple = !empty($_GET['simple']) ? $_GET['simple'] : 0;
if($_GET['hash'] != $swfhash) {
return $this->uploadmsg(10);
}
$upload = new discuz_upload();
$upload->init($_FILES['Filedata'], 'forum');
$this->attach = &$upload->attach;
if($upload->error()) {
return $this->uploadmsg(2);
}
$allowupload = !$_G['group']['maxattachnum'] || $_G['group']['maxattachnum'] && $_G['group']['maxattachnum'] > getuserprofile('todayattachs');;
if(!$allowupload) {
return $this->uploadmsg(6);
}
if($_G['group']['attachextensions'] && (!preg_match("/(^|\s|,)".preg_quote($upload->attach['ext'], '/')."($|\s|,)/i", $_G['group']['attachextensions']) || !$upload->attach['ext'])) {
return $this->uploadmsg(1);
}
if(empty($upload->attach['size'])) {
return $this->uploadmsg(2);
}
if($_G['group']['maxattachsize'] && $upload->attach['size'] > $_G['group']['maxattachsize']) {
$this->error_sizelimit = $_G['group']['maxattachsize'];
return $this->uploadmsg(3);
}
loadcache('attachtype');
if($_G['fid'] && isset($_G['cache']['attachtype'][$_G['fid']][$upload->attach['ext']])) {
$maxsize = $_G['cache']['attachtype'][$_G['fid']][$upload->attach['ext']];
} elseif(isset($_G['cache']['attachtype'][0][$upload->attach['ext']])) {
$maxsize = $_G['cache']['attachtype'][0][$upload->attach['ext']];
}
if(isset($maxsize)) {
if(!$maxsize) {
$this->error_sizelimit = 'ban';
return $this->uploadmsg(4);
} elseif($upload->attach['size'] > $maxsize) {
$this->error_sizelimit = $maxsize;
return $this->uploadmsg(5);
}
}
if($upload->attach['size'] && $_G['group']['maxsizeperday']) {
$todaysize = getuserprofile('todayattachsize') + $upload->attach['size'];
if($todaysize >= $_G['group']['maxsizeperday']) {
$this->error_sizelimit = 'perday|'.$_G['group']['maxsizeperday'];
return $this->uploadmsg(11);
}
}
updatemembercount($_G['uid'], array('todayattachs' => 1, 'todayattachsize' => $upload->attach['size']));
$upload->save();
if($upload->error() == -103) {
return $this->uploadmsg(8);
} elseif($upload->error()) {
return $this->uploadmsg(9);
}
$thumb = $remote = $width = 0;
if($_GET['type'] == 'image' && !$upload->attach['isimage']) {
return $this->uploadmsg(7);
}
if($upload->attach['isimage']) {
if(!in_array($upload->attach['imageinfo']['2'], array(1,2,3,6))) {
return $this->uploadmsg(7);
}
if($_G['setting']['showexif']) {
require_once libfile('function/attachment');
$exif = getattachexif(0, $upload->attach['target']);
}
if($_G['setting']['thumbsource'] || $_G['setting']['thumbstatus']) {
require_once libfile('class/image');
$image = new image;
}
if($_G['setting']['thumbsource'] && $_G['setting']['sourcewidth'] && $_G['setting']['sourceheight']) {
$thumb = $image->Thumb($upload->attach['target'], '', $_G['setting']['sourcewidth'], $_G['setting']['sourceheight'], 1, 1) ? 1 : 0;
$width = $image->imginfo['width'];
$upload->attach['size'] = $image->imginfo['size'];
}
if($_G['setting']['thumbstatus']) {
$thumb = $image->Thumb($upload->attach['target'], '', $_G['setting']['thumbwidth'], $_G['setting']['thumbheight'], $_G['setting']['thumbstatus'], 0) ? 1 : 0;
$width = $image->imginfo['width'];
}
if($_G['setting']['thumbsource'] || !$_G['setting']['thumbstatus']) {
list($width) = @getimagesize($upload->attach['target']);
}
}
if($_GET['type'] != 'image' && $upload->attach['isimage']) {
$upload->attach['isimage'] = -1;
}
$this->aid = $aid = getattachnewaid($this->uid);
$insert = array(
'aid' => $aid,
'dateline' => $_G['timestamp'],
'filename' => dhtmlspecialchars(censor($upload->attach['name'])),
'filesize' => $upload->attach['size'],
'attachment' => $upload->attach['attachment'],
'isimage' => $upload->attach['isimage'],
'uid' => $this->uid,
'thumb' => $thumb,
'remote' => $remote,
'width' => $width,
);
C::t('forum_attachment_unused')->insert($insert);
if($upload->attach['isimage'] && $_G['setting']['showexif']) {
C::t('forum_attachment_exif')->insert($aid, $exif);
}
return $this->uploadmsg(0);
}
function uploadmsg($statusid) {
global $_G;
$this->error_sizelimit = !empty($this->error_sizelimit) ? $this->error_sizelimit : 0;
if($this->getaid) {
$this->getaid = $statusid ? -$statusid : $this->aid;
return;
}
if($this->simple == 1) {
echo 'DISCUZUPLOAD|'.$statusid.'|'.$this->aid.'|'.$this->attach['isimage'].'|'.$this->error_sizelimit;
} elseif($this->simple == 2) {
echo 'DISCUZUPLOAD|'.($_GET['type'] == 'image' ? '1' : '0').'|'.$statusid.'|'.$this->aid.'|'.$this->attach['isimage'].'|'.($this->attach['isimage'] ? $this->attach['attachment'] : '').'|'.$this->attach['name'].'|'.$this->error_sizelimit;
} else {
echo $statusid ? -$statusid : $this->aid;
}
exit;
}
}
?>