* @package file * @version $Id$ * @link http://www.zentao.net */ ?> now = time(); $this->setSavePath(); $this->setWebPath(); } /** * Get files of an object. * * @param string $objectType * @param string $objectID * @access public * @return array */ public function getByObject($objectType, $objectID) { return $this->dao->select('*')->from(TABLE_FILE)->where('objectType')->eq($objectType)->andWhere('objectID')->eq((int)$objectID)->orderBy('id')->fetchAll(); } /** * Get info of a file. * * @param int $fileID * @access public * @return object */ public function getById($fileID) { $file = $this->dao->findById($fileID)->from(TABLE_FILE)->fetch(); $file->webPath = $this->webPath . $file->pathname; $file->realPath = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . $file->pathname; return $file; } /** * Save upload. * * @param string $objectType * @param string $objectID * @param string $extra * @access public * @return array */ public function saveUpload($objectType = '', $objectID = '', $extra = '') { $fileTitles = array(); $now = helper::today(); $files = $this->getUpload(); foreach($files as $id => $file) { move_uploaded_file($file['tmpname'], $this->savePath . $file['pathname']); $file['objectType'] = $objectType; $file['objectID'] = $objectID; $file['addedBy'] = $this->app->user->account; $file['addedDate'] = $now; $file['extra'] = $extra; unset($file['tmpname']); $this->dao->insert(TABLE_FILE)->data($file)->exec(); $fileTitles[$this->dao->lastInsertId()] = $file['title']; } return $fileTitles; } /** * Get counts of uploaded files. * * @access public * @return int */ public function getCount() { return count($this->getUpload()); } /** * Get info of uploaded files. * * @param string $htmlTagName * @access public * @return array */ public function getUpload($htmlTagName = 'files') { $files = array(); if(!isset($_FILES[$htmlTagName])) return $files; /* If the file var name is an array. */ if(is_array($_FILES[$htmlTagName]['name'])) { extract($_FILES[$htmlTagName]); foreach($name as $id => $filename) { if(empty($filename)) continue; $file['extension'] = $this->getExtension($filename); $file['pathname'] = $this->setPathName($id, $file['extension']); $file['title'] = !empty($_POST['labels'][$id]) ? htmlspecialchars($_POST['labels'][$id]) : str_replace('.' . $file['extension'], '', $filename); $file['size'] = $size[$id]; $file['tmpname'] = $tmp_name[$id]; $files[] = $file; } } else { if(empty($_FILES[$htmlTagName]['name'])) return $files; extract($_FILES[$htmlTagName]); $file['extension'] = $this->getExtension($name); $file['pathname'] = $this->setPathName(0, $file['extension']); $file['title'] = !empty($_POST['labels'][0]) ? htmlspecialchars($_POST['labels'][0]) : substr($name, 0, strpos($name, $file['extension']) - 1); $file['size'] = $size; $file['tmpname'] = $tmp_name; return array($file); } return $files; } /** * Get extension of a file. * * @param string $filename * @access public * @return string */ public function getExtension($filename) { $extension = pathinfo($filename, PATHINFO_EXTENSION); if(strpos($this->config->file->dangers, $extension) !== false) return 'txt'; return $extension; } /** * Set path name of the uploaded file to be saved. * * @param int $fileID * @param string $extension * @access public * @return string */ public function setPathName($fileID, $extension) { $sessionID = session_id(); $randString = substr($sessionID, mt_rand(0, strlen($sessionID) - 5), 3); return date('Ym/dHis', $this->now) . $fileID . mt_rand(0, 10000) . $randString . '.' . $extension; } /** * Set save path. * * @access public * @return void */ public function setSavePath() { $savePath = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . date('Ym/', $this->now); if(!file_exists($savePath)) @mkdir($savePath, 0777, true); $this->savePath = dirname($savePath) . '/'; } /** * Set the web path of upload files. * * @access public * @return void */ public function setWebPath() { $this->webPath = $this->app->getWebRoot() . "data/upload/{$this->app->company->id}/"; } /** * Insert the set image size code. * * @param string $content * @param int $maxSize * @access public * @return string */ public function setImgSize($content, $maxSize = 0) { return str_replace('src="data/upload', 'onload="setImageSize(this,' . $maxSize . ' )" src="data/upload', $content); } }