Files
Pichome/core/class/table/table_attachment.php
2024-01-31 01:00:33 +08:00

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