190 lines
7.9 KiB
PHP
190 lines
7.9 KiB
PHP
<?php
|
|
/*
|
|
* @copyright QiaoQiaoShiDai Internet Technology(Shanghai)Co.,Ltd
|
|
* @license https://www.oaooa.com/licenses/
|
|
*
|
|
* @link https://www.oaooa.com
|
|
* @author zyx(zyx@oaooa.com)
|
|
*/
|
|
|
|
if (!defined('IN_OAOOA')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
class table_attachment extends dzz_table
|
|
{
|
|
public function __construct()
|
|
{
|
|
|
|
$this->_table = 'attachment';
|
|
$this->_pk = 'aid';
|
|
$this->_pre_cache_key = 'attachment_';
|
|
$this->_cache_ttl = 0;
|
|
parent::__construct();
|
|
}
|
|
|
|
public function setUnrun_by_aid($aid, $r)
|
|
{//设置允许运行,如果文件在本地同时修改实际文件名,增加无法运行的后缀;
|
|
$data = parent::fetch($aid);
|
|
if ($data['remote'] == 0 || $data['remote'] == 1) {//文件在本地,修改文件名
|
|
if ($r > 0) {
|
|
$earr = explode('.', $data['attachment']);
|
|
foreach ($earr as $key => $ext) {
|
|
if (in_array(strtolower($ext), array($data['filetype'], 'dzz'))) unset($earr[$key]);
|
|
}
|
|
$tattachment = implode('.', $earr) . '.dzz';
|
|
if (is_file(getglobal('setting/attachdir') . './' . $data['attachment']) && @rename(getglobal('setting/attachdir') . './' . $data['attachment'], getglobal('setting/attachdir') . './' . $tattachment)) {
|
|
return parent::update($aid, array('unrun' => $r, 'attachment' => $tattachment));
|
|
}
|
|
|
|
} else {
|
|
$earr = explode('.', $data['attachment']);
|
|
foreach ($earr as $key => $ext) {
|
|
if (in_array(strtolower($ext), array($data['filetype'], 'dzz'))) unset($earr[$key]);
|
|
}
|
|
$tattachment = implode('.', $earr) . '.' . $data['filetype'];
|
|
if (is_file(getglobal('setting/attachdir') . './' . $data['attachment']) && @rename(getglobal('setting/attachdir') . './' . $data['attachment'], getglobal('setting/attachdir') . './' . $tattachment)) {
|
|
return parent::update($aid, array('unrun' => $r, 'attachment' => $tattachment));
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function getThumbByAid($aid, $width = 256, $height = 256, $original = 0)
|
|
{ //通过附件获取缩略图
|
|
//可以让$aid 带入$attach数组.
|
|
if (!is_array($aid)) {
|
|
$attach = self::fetch($aid);
|
|
} else {
|
|
$attach = $aid;
|
|
}
|
|
if (!$width || !$height) $original = 1;
|
|
/*$bz=io_remote::getBzByRemoteid($attach['remote']);
|
|
if($bz=='dzz'){*/
|
|
$path = 'attach::' . $attach['aid'];
|
|
/*}else{
|
|
$path=$bz.'/'.$attach['attachment'];
|
|
}*/
|
|
return (defined('DZZSCRIPT') ? DZZSCRIPT : 'index.php') . '?mod=io&op=thumbnail&width=' . $width . '&height=' . $height . '&original=' . $original . '&path=' . dzzencode($path);
|
|
}
|
|
|
|
public function get_total_filesize()
|
|
{
|
|
$attachsize = 0;
|
|
$attachsize = DB::result_first("SELECT SUM(filesize) FROM " . DB::table($this->table));
|
|
return $attachsize;
|
|
}
|
|
|
|
public function addcopy_by_aid($aids, $ceof = 1)
|
|
{
|
|
if (!is_array($aids)) $aids = array($aids);
|
|
|
|
if ($ceof > 0) {
|
|
DB::query("update %t set copys=copys+%d where aid IN(%n)", array($this->_table, $ceof, $aids));
|
|
} else {
|
|
DB::query("update %t set copys=copys-%d where aid IN(%n)", array($this->_table, abs($ceof), $aids));
|
|
}
|
|
$this->clear_cache($aids);
|
|
}
|
|
|
|
public function delete_by_aid($aid)
|
|
{ //删除附件
|
|
global $_G;
|
|
if (!$data = $this->fetch($aid)) {
|
|
return false;
|
|
}
|
|
if ($data['copys'] > 1) {
|
|
return $this->update($aid, array('copys' => $data['copys'] - 1));
|
|
} else {
|
|
if (io_remote::DeleteFromSpace($data)) {
|
|
if ($return = $this->delete($aid)) {
|
|
C::t('thumb_cache')->delete_by_aid($aid);
|
|
C::t('ffmpegimage_cache')->delete_by_path($aid);
|
|
C::t('video_record')->delete_by_aid($aid);
|
|
$aiddata = $aid;
|
|
Hook::listen('finalydelete', $aiddata);
|
|
}
|
|
return $return;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function fetch_by_md5($md5)
|
|
{ //通过md5值返回一条数据
|
|
return DB::fetch_first("SELECT * FROM %t WHERE md5 = %s ", array($this->table, $md5));
|
|
}
|
|
|
|
public function getSizeByRemote($remoteid)
|
|
{ //统计占用空间
|
|
if ($remoteid < 2) {
|
|
return DB::result_first("SELECT sum(filesize) FROM %t WHERE remote <2 and copys>0 ", array($this->table));
|
|
} else {
|
|
return DB::result_first("SELECT sum(filesize) FROM %t WHERE remote = %d and copys>0 ", array($this->table, $remoteid));
|
|
}
|
|
|
|
}
|
|
|
|
public function getAttachByFilter($filter, $sizecount = false)
|
|
{ //统计占用空间
|
|
$where = 'copys>0 and remote!=' . $filter['remoteid'];
|
|
if ($filter['oremoteid']) {
|
|
if ($filter['oremoteid'] < 2) {
|
|
$where .= " and remote<2";
|
|
} else {
|
|
$where .= " and remote= '{$filter[oremoteid]}'";
|
|
}
|
|
}
|
|
|
|
if ($filter['aid']) {
|
|
$where .= " and aid='{$filter['aid']}'";
|
|
}
|
|
$filter['sizelt'] = intval($filter['sizelt'] * 1024 * 1024);
|
|
if ($filter['sizelt'] > 0) {
|
|
$where .= " and filesize>'$filter[sizelt]'";
|
|
}
|
|
$filter['sizegt'] = intval($filter['sizegt'] * 1024 * 1024);
|
|
if ($filter['sizegt'] > 0) {
|
|
$where .= " and filesize<'$filter[sizegt]'";
|
|
}
|
|
if ($filter['exts']) {
|
|
$extarr = explode(',', $filter['exts']);
|
|
if ($extarr) {
|
|
$where .= " and filetype IN (" . dimplode($extarr) . ")";
|
|
}
|
|
}
|
|
if ($filter['dateline']) {
|
|
$where .= " and dateline>='{$filter[dateline]}'";
|
|
}
|
|
if ($filter['aid1']) {
|
|
$where .= " and aid>'{$filter[aid1]}'";
|
|
}
|
|
|
|
if ($filter['ignore']) {
|
|
$ignores = explode(',', $filter['ignore']);
|
|
if ($ignores) {
|
|
$where .= " and aid NOT IN (" . dimplode($ignores) . ")";
|
|
}
|
|
}
|
|
if ($sizecount) return DB::result_first("SELECT sum(filesize) FROM " . DB::table($this->_table) . " WHERE $where ");
|
|
else return DB::fetch_first("SELECT * FROM " . DB::table($this->_table) . " WHERE $where order by aid");
|
|
|
|
}
|
|
|
|
public function insert($setarr, $return_insert_id = 1,$nohook=0)
|
|
{
|
|
if ($aid = parent::insert($setarr, $return_insert_id)) {
|
|
|
|
if(!$nohook)Hook::listen('table_attachment_insert', $aid);//插入附件表时的挂载点
|
|
|
|
return $aid;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|
|
?>
|