// +---------------------------------------------------------------------- namespace Addons\Attachment\Model; use Think\Model; /** * 分类模型 */ class AttachmentModel extends Model{ /** * 附件模型自动完成 * @var array */ protected $_auto = array( array('uid', 'session', self::MODEL_INSERT, 'function', 'user_auth.uid'), array('download', 0, self::MODEL_INSERT), array('sort', 0, self::MODEL_INSERT), array('create_time', NOW_TIME, self::MODEL_INSERT), array('update_time', NOW_TIME, self::MODEL_BOTH), array('status', 1, self::MODEL_BOTH), ); protected function _after_find(&$result,$options) { $result['update_time_text'] = date('Y-m-d H:i:s', $result['update_time']); $result['document_title'] = D('Document')->getFieldById($result['record_id'], 'title'); $result['size'] = format_bytes($result['size']); } protected function _after_select(&$result,$options){ foreach($result as &$record){ $this->_after_find($record,$options); } } /** * 保存文件附件到数据库 * @param string $title 附件标题 * @param array $file 文件数据 * @param number $record 关联记录ID * @param integer $dir 是否为目录 * @return boolean */ public function saveFile($title, $file, $record, $dir = 0){ $data = array( 'title' => $title, 'type' => 2, 'source' => $file['id'], 'record_id' => $record, 'dir' => $dir, 'size' => $file['size'], ); /* 保存附件 */ if($this->create($data) && $this->add()){ return true; } else { return false; } } public function saveDir(){ } /** * 下载附件 * @param number $id 附件ID * @return boolean 下载失败返回false */ public function download($id){ $info = $this->field(true)->find($id); if($info && $info['status'] == 1){ /* 下载附件 */ $this->downloadId = $id; switch($info['type']){ case 0: //TODO: 下载目录? break; case 1: //TODO: 下载外部附件 break; case 2: $File = D('File'); $root = C('ATTACHMENT_UPLOAD.rootPath'); $call = array($this, 'setDownload'); if(false === $File->download($root, $info['source'], $call, $id)){ $this->error = $File->getError(); } break; default: $this->error = '无效附件类型!'; } } else { $this->error = '附件已删除或被禁用!'; } return false; } /** * 新增下载次数(File模型回调方法) */ public function setDownload($id){ $map = array('id' => $id); $this->where($map)->setInc('download'); } }