PageRenderTime 25ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/new88li/core/model/system/mdl.storager.php

http://phpfor.googlecode.com/
PHP | 203 lines | 182 code | 21 blank | 0 comment | 25 complexity | 2d1459639c0d11f775dd15f2b9df3f1b MD5 | raw file
  1. <?php
  2. class mdl_storager{
  3. function mdl_storager(){
  4. $this->system = $GLOBALS['system'];
  5. $this->base_url = $this->system->base_url();
  6. $this->class_name = defined('WITH_STORAGER')?constant('WITH_STORAGER'):'fs_storage';
  7. require_once(PLUGIN_DIR.'/functions/'.$this->class_name.'.php');
  8. $this->worker = new $this->class_name;
  9. if(defined('HOST_MIRRORS')){
  10. $host_mirrors = preg_split('/[,\s]+/',constant('HOST_MIRRORS'));
  11. if(is_array($host_mirrors) && isset($host_mirrors[0])){
  12. $this->host_mirrors = &$host_mirrors;
  13. $this->host_mirrors_count = count($host_mirrors)-1;
  14. }
  15. }
  16. }
  17. function &parse($ident){
  18. $ret = array();
  19. if(!$ident){
  20. return false;
  21. }elseif(list($ret['url'],$ret['id'],$ret['storager']) = explode('|',$ident)){
  22. return $ret;
  23. }else{
  24. $ret['url'] = &$ident;
  25. return $ret;
  26. }
  27. }
  28. function save($file,$type=null,$addons=''){
  29. if($addons){
  30. if(!is_array($addons)){
  31. $addons = array($addons);
  32. }
  33. }else{
  34. $addons = array();
  35. }
  36. if($id = $this->worker->save($file,$url,$type,$addons)){
  37. return $url.'|'.$id.'|'.$this->class_name;
  38. }else{
  39. return false;
  40. }
  41. }
  42. function __check_upload($file){
  43. switch($file['error']){
  44. case 1:
  45. return __('??????????????????');
  46. break;
  47. case 2:
  48. return __('??????????????');
  49. break;
  50. case 3:
  51. return __('????????');
  52. break;
  53. case 4:
  54. $msg=__('??????????');
  55. break;
  56. case 5:
  57. return __('??????????');
  58. break;
  59. case 6:
  60. return __('????????????');
  61. break;
  62. }
  63. return false;
  64. }
  65. function get_pic_upload_max(){
  66. $limited=$this->system->getConf('system.upload.limit');
  67. switch($limited){
  68. case '0':
  69. $limited=array('size'=>500*1024,'desc'=>'500KB');
  70. break;
  71. case '1':
  72. $limited=array('size'=>1000*1024,'desc'=>'1M');
  73. break;
  74. case '2':
  75. $limited=array('size'=>2000*1024,'desc'=>'2M');
  76. break;
  77. case '3':
  78. $limited=array('size'=>3000*1024,'desc'=>'3M');
  79. break;
  80. case '4':
  81. $limited=array('size'=>5000*1024,'desc'=>'5M');
  82. break;
  83. case '5':
  84. $limited=array('size'=>5000000*1024,'desc'=>__('?????'));
  85. break;
  86. default:
  87. $limited=array('size'=>500*1024,'desc'=>'500KB');
  88. break;
  89. }
  90. return $limited;
  91. }
  92. function save_upload($file,$type=null,$addons='',&$msg){
  93. $file['name'] = strtolower($file['name']);
  94. if($file['error']){
  95. $msg=$this->__check_upload($file);
  96. trigger_error($msg,E_USER_ERROR);
  97. return false;
  98. }else{
  99. $limited=$this->get_pic_upload_max();
  100. if($file['size']>$limited['size']){
  101. $msg=__('???????????').$limited['desc'].__('??????????');
  102. trigger_error(__('???????????').$limited['desc'].__('??????????'),E_USER_ERROR);
  103. return false;
  104. }
  105. $allow_upload = array('.gif'=>1,'.jpg'=>1,'.jpeg'=>1,'.png'=>1,'.bmp'=>1,'.swf'=>1);
  106. if(!isset($allow_upload[ext_name($file['name'])])){
  107. $msg=__('?????????');
  108. trigger_error(__('?????????'),E_USER_ERROR);
  109. return false;
  110. }
  111. if($addons){
  112. if(is_array($addons)){
  113. $addons[] = $file['name'];
  114. }else{
  115. $addons = array($addons,$file['name']);
  116. }
  117. }else{
  118. $addons = array($file['name']);
  119. }
  120. if(method_exists($this->worker,'save_upload')){
  121. if($id = $this->worker->save_upload($file['tmp_name'],$url,$type,$addons)){
  122. if($this->class_name == 'ftp_storage'){
  123. return $id;
  124. }
  125. return $url.'|'.$id.'|'.$this->class_name;
  126. }else{
  127. return false;
  128. }
  129. }else{
  130. if($id = $this->worker->save($file['tmp_name'],$url,$type,$addons)){
  131. return $url.'|'.$id.'|'.$this->class_name;
  132. }else{
  133. return false;
  134. }
  135. }
  136. }
  137. }
  138. function replace($file,$ident,$type=null,$addons=''){
  139. if(method_exists($this->worker,'replace') && $ident){
  140. $data = $this->parse($ident);
  141. if($this->worker->replace($file,$data['id'])){
  142. return $ident;
  143. }else{
  144. return false;
  145. }
  146. }else{
  147. if($ident){
  148. $this->remove($ident);
  149. }
  150. return $this->save($file,$type,$addons);
  151. }
  152. }
  153. function remove($ident){
  154. $data = $this->parse($ident);
  155. return $this->worker->remove($data['id']);
  156. }
  157. function getFile($ident){
  158. if($data = $this->parse($ident)){
  159. return $this->worker->getFile($data['id']);
  160. }else{
  161. return false;
  162. }
  163. }
  164. function getUrl($ident){
  165. if($ident){
  166. $libs = array('http://'=>1,'https:/'=>1);
  167. $data = &$this->parse($ident);
  168. if(isset($libs[strtolower(substr($data['url'],0,7))])){
  169. return $data['url'];
  170. }else{
  171. if($this->host_mirrors){
  172. return $this->host_mirrors[rand(0,$this->host_mirrors_count)].'/'.$data['url'];
  173. }else{
  174. return $this->base_url.$data['url'];
  175. }
  176. }
  177. }else{
  178. return false;
  179. }
  180. }
  181. }
  182. ?>