149 lines
5.5 KiB
PHP
149 lines
5.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* [Discuz!] (C)2001-2099 Comsenz Inc.
|
|
* This is NOT a freeware, use is subject to license terms
|
|
*
|
|
* $Id: table_forum_attachment_n.php 27745 2012-02-14 01:43:38Z monkey $
|
|
*/
|
|
|
|
if(!defined('IN_DISCUZ')) {
|
|
exit('Access Denied');
|
|
}
|
|
|
|
class table_forum_attachment_n extends discuz_table
|
|
{
|
|
public function __construct() {
|
|
|
|
$this->_table = '';
|
|
$this->_pk = 'aid';
|
|
|
|
parent::__construct();
|
|
}
|
|
|
|
private function _get_table($tableid) {
|
|
if(!is_numeric($tableid)) {
|
|
list($idtype, $id) = explode(':', $tableid);
|
|
if($idtype == 'aid') {
|
|
$aid = dintval($id);
|
|
$tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE aid='$aid'");
|
|
} elseif($idtype == 'tid') {
|
|
$tid = (string)$id;
|
|
$tableid = dintval($tid{strlen($tid)-1});
|
|
} elseif($idtype == 'pid') {
|
|
$pid = dintval($id);
|
|
$tableid = DB::result_first("SELECT tableid FROM ".DB::table('forum_attachment')." WHERE pid='$pid' LIMIT 1");
|
|
$tableid = $tableid >= 0 && $tableid < 10 ? intval($tableid) : 127;
|
|
}
|
|
}
|
|
if($tableid >= 0 && $tableid < 10) {
|
|
return 'forum_attachment_'.intval($tableid);
|
|
} elseif($tableid == 127) {
|
|
return 'forum_attachment_unused';
|
|
} else {
|
|
throw new DbException('Table forum_attachment_'.$this->_table.' has not exists');
|
|
}
|
|
}
|
|
|
|
private function _check_id($idtype, $ids) {
|
|
if($idtype == 'pid' && $this->_table == 'forum_attachment_unused') {
|
|
return false;
|
|
}
|
|
if(in_array($idtype, array('aid', 'tid', 'pid', 'uid')) && !empty($ids)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public function delete($tableid, $val){
|
|
return DB::delete($this->_get_table($tableid), DB::field($this->_pk, $val));
|
|
}
|
|
|
|
public function delete_by_id($tableid, $idtype, $id){
|
|
return $this->_check_id($idtype, $id) ? DB::delete($this->_get_table($tableid), DB::field($idtype, $id)) : false;
|
|
}
|
|
|
|
public function update($tableid, $val, $data) {
|
|
if(!$data) {
|
|
return;
|
|
}
|
|
return DB::update($this->_get_table($tableid), $data, DB::field($this->_pk, $val));
|
|
}
|
|
|
|
public function insert($tableid, $data, $return_insert_id = false, $replace = false, $silent = false) {
|
|
if(!$data) {
|
|
return;
|
|
}
|
|
return DB::insert($this->_get_table($tableid), $data, $return_insert_id, $replace, $silent);
|
|
}
|
|
|
|
public function fetch($tableid, $aid, $isimage = false){
|
|
$isimage = $isimage === false ? '' : ' AND '.DB::field('isimage', $isimage);
|
|
return !empty($aid) ? DB::fetch_first('SELECT * FROM %t WHERE %i %i', array($this->_get_table($tableid), DB::field($this->_pk, $aid), $isimage)) : array();
|
|
}
|
|
|
|
public function fetch_max_image($tableid, $idtype, $id){
|
|
return $this->_check_id($idtype, $id) ? DB::fetch_first('SELECT * FROM %t WHERE %i AND isimage IN (1, -1) ORDER BY width DESC LIMIT 1', array($this->_get_table($tableid), DB::field($idtype, $id))) : array();
|
|
}
|
|
|
|
public function count_by_id($tableid, $idtype, $id){
|
|
return $this->_check_id($idtype, $id) ? DB::result_first('SELECT COUNT(*) FROM %t WHERE %i', array($this->_get_table($tableid), DB::field($idtype, $id))) : 0;
|
|
}
|
|
|
|
public function count_image_by_id($tableid, $idtype, $id){
|
|
return $this->_check_id($idtype, $id) ? DB::result_first('SELECT COUNT(*) FROM %t WHERE %i AND isimage IN (1, -1)', array($this->_get_table($tableid), DB::field($idtype, $id))) : 0;
|
|
}
|
|
|
|
public function fetch_all($tableid, $aids, $remote = false, $isimage = false){
|
|
$remote = $remote === false ? '' : ' AND '.DB::field('remote', $remote);
|
|
$isimage = $isimage === false ? '' : ' AND '.DB::field('isimage', $isimage);
|
|
return !empty($aids) ? DB::fetch_all('SELECT * FROM %t WHERE %i %i %i', array($this->_get_table($tableid), DB::field($this->_pk, $aids), $remote, $isimage)) : array();
|
|
}
|
|
|
|
public function fetch_all_by_id($tableid, $idtype, $ids, $orderby = '', $isimage = false, $isprice = false, $remote = false, $limit = false) {
|
|
if($this->_check_id($idtype, $ids)) {
|
|
$attachments = array();
|
|
if($orderby) {
|
|
$orderby = 'ORDER BY '.$orderby;
|
|
}
|
|
$isimage = $isimage === false ? '' : ' AND '.DB::field('isimage', $isimage);
|
|
$isprice = $isprice === false ? '' : ' AND '.DB::field('price', 0, '>');
|
|
$remote = $remote === false ? '' : ' AND '.DB::field('remote', $remote);
|
|
$limit = $limit < 1 ? '' : DB::limit(0, $limit);
|
|
$query = DB::query("SELECT * FROM %t WHERE %i %i %i %i %i %i", array($this->_get_table($tableid), DB::field($idtype, $ids), $isimage, $isprice, $remote, $orderby, $limit));
|
|
while($value = DB::fetch($query)) {
|
|
$attachments[$value['aid']] = $value;
|
|
}
|
|
return $attachments;
|
|
} else {
|
|
return array();
|
|
}
|
|
}
|
|
|
|
public function reset_picid($tableid, $newids) {
|
|
if($newids) {
|
|
DB::query("UPDATE %t SET picid='0' WHERE picid IN (%n)", array($this->_get_table($tableid), (array)$newids), false, true);
|
|
}
|
|
}
|
|
|
|
public function fetch_by_aid_uid($tableid, $aid, $uid) {
|
|
$query = DB::query("SELECT * FROM %t WHERE aid=%d AND uid=%d", array($this->_get_table($tableid), $aid, $uid));
|
|
return DB::fetch($query);
|
|
}
|
|
|
|
public function fetch_all_by_pid_width($tableid, $pids, $width) {
|
|
return DB::fetch_all("SELECT * FROM %t WHERE %i AND isimage IN ('1', '-1') AND width>=%d", array($this->_get_table($tableid), DB::field('pid', $pids), $width));
|
|
}
|
|
|
|
public function get_total_filesize() {
|
|
$attachsize = 0;
|
|
for($i = 0;$i < 10;$i++) {
|
|
$attachsize += DB::result_first("SELECT SUM(filesize) FROM ".DB::table('forum_attachment_'.$i));
|
|
}
|
|
return $attachsize;
|
|
}
|
|
|
|
}
|
|
|
|
?>
|