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

/trunk/chimbien/app/controllers/components/image.php

http://goldcat.googlecode.com/
PHP | 290 lines | 218 code | 24 blank | 48 comment | 37 complexity | 73bf2ab790577087d53adcbc6f784081 MD5 | raw file
Possible License(s): AGPL-3.0, AGPL-1.0, BSD-3-Clause
  1. <?php
  2. class ImageComponent extends Object {
  3. var $contentType = array('image/jpg','image/bmp','image/jpeg','image/gif','image/png','image/pjpg','image/pbmp','image/pjpeg','image/ppng','image/pgif');
  4. function upload_image_and_thumbnail($fileData,$size,$subFolder,$prefix,$max_size=7000) {
  5. if (strlen($fileData['name'])>4) {
  6. $error = 0;
  7. $destFolder = WWW_ROOT.$subFolder;
  8. $realFileName = $fileData['name'];
  9. if(!is_dir($destFolder)) mkdir($destFolder,true);
  10. $filetype = $this->getFileExtension($fileData['name']);
  11. $filetype = strtolower($filetype);
  12. if(!in_array($fileData['type'],$this->contentType)) {
  13. return false;
  14. exit();
  15. }
  16. else if($fileData['size'] > 700000 ) {
  17. return false;exit();
  18. }
  19. else {
  20. $imgsize = GetImageSize($fileData['tmp_name']);
  21. }
  22. if (is_uploaded_file($fileData['tmp_name'])) {
  23. if (!copy($fileData['tmp_name'],$destFolder.'/'.$realFileName )) {
  24. return false;
  25. exit();
  26. }
  27. else {
  28. $this->resize_img($destFolder.'/'.$realFileName, $size, $destFolder.'/'.$prefix.$realFileName);
  29. unlink($destFolder.'/'.$realFileName);
  30. }
  31. }
  32. return $fileData;
  33. }
  34. }
  35. function delete_image($filename) {
  36. unlink($filename);
  37. }
  38. function uploadFiles($folder, $formdata,$thumb='', $itemId = null) {
  39. // setup dir names absolute and relative
  40. $folder_url = WWW_ROOT.$folder;
  41. $rel_url = $folder;
  42. $result = array();
  43. // create the folder if it does not exist
  44. if(!is_dir($folder_url)) {
  45. mkdir($folder_url);
  46. }
  47. // if itemId is set create an item folder
  48. if($itemId) {
  49. // set new absolute folder
  50. $folder_url = WWW_ROOT.$folder.'/'.$itemId;
  51. // set new relative folder
  52. $rel_url = $folder.'/'.$itemId;
  53. // create directory
  54. if(!is_dir($folder_url)) {
  55. mkdir($folder_url);
  56. }
  57. }
  58. // list of permitted file types, this is only images but documents can be added
  59. $permitted = array('image/gif','image/jpeg','image/pjpeg','image/png');
  60. // loop through and deal with the files
  61. foreach($formdata as $file){
  62. // print_r($file);
  63. // replace spaces with underscores
  64. if(!empty($file['name'])){
  65. $filename = str_replace(' ', '_', $file['name']);
  66. // assume filetype is false
  67. $typeOK = false;
  68. // check filetype is ok
  69. foreach($permitted as $type) {
  70. if($type == $file['type']) {
  71. $typeOK = true;
  72. break;
  73. }
  74. }
  75. // if file type ok upload the file
  76. if($typeOK) {
  77. // switch based on error code
  78. switch($file['error']) {
  79. case 0:
  80. // check filename already exists
  81. $now = '';
  82. if(!file_exists($folder_url.'/'.$filename)) {
  83. // create full filename
  84. $full_url = $folder_url.'/'.$filename;
  85. $url = $rel_url.'/'.$filename;
  86. // upload the file
  87. $success = move_uploaded_file($file['tmp_name'], $url);
  88. } else {
  89. // create unique filename and upload file
  90. ini_set('date.timezone', 'Europe/London');
  91. $now = date('Y-m-d-His');
  92. $full_url = $folder_url.'/'.$now.$filename;
  93. $url = $rel_url.'/'.$now.$filename;
  94. $success = move_uploaded_file($file['tmp_name'], $url);
  95. }
  96. // if upload was successful
  97. if($success) {
  98. // save the url of the file
  99. $result['urls'][] = $url;
  100. $result['filename'] = $now.$filename;
  101. $result['mfile'][] = $now.$filename;
  102. if($thumb){
  103. $thumbFolder = $folder_url.'/thumb';
  104. $this->resize_img($folder_url.'/'.$result['filename'], $thumb, $thumbFolder.'/'.$result['filename']);
  105. }
  106. } else {
  107. $result['errors'][] = "Error uploaded $filename. Please try again.";
  108. }
  109. break;
  110. case 3:
  111. // an error occured
  112. $result['errors'][] = "Error uploading $filename. Please try again.";
  113. break;
  114. default:
  115. // an error occured
  116. $result['errors'][] = "System error uploading $filename. Contact webmaster.";
  117. break;
  118. }
  119. } elseif($file['error'] == 4) {
  120. // no file was selected for upload
  121. $result['nofiles'][] = "No file Selected";
  122. } else {
  123. // unacceptable file type
  124. $result['errors'][] = "$filename cannot be uploaded. Acceptable file types: gif, jpg, png.";
  125. }
  126. }
  127. }
  128. return $result;
  129. }
  130. function uploadFile($folder, $file, $itemId = null) {
  131. // setup dir names absolute and relative
  132. $folder_url = WWW_ROOT.$folder;
  133. $rel_url = $folder;
  134. $result = array();
  135. // create the folder if it does not exist
  136. if(!is_dir($folder_url)) {
  137. mkdir($folder_url);
  138. }
  139. // if itemId is set create an item folder
  140. if($itemId) {
  141. // set new absolute folder
  142. $folder_url = WWW_ROOT.$folder.'/'.$itemId;
  143. // set new relative folder
  144. $rel_url = $folder.'/'.$itemId;
  145. // create directory
  146. if(!is_dir($folder_url)) {
  147. mkdir($folder_url);
  148. }
  149. }
  150. // list of permitted file types, this is only images but documents can be added
  151. // $permitted = array('image/gif','image/jpeg','image/pjpeg','image/png');
  152. // loop through and deal with the files
  153. // replace spaces with underscores
  154. if(!empty($file['name'])){
  155. $filename = str_replace(' ', '_', $file['name']);
  156. // assume filetype is false
  157. $typeOK = true;
  158. // if file type ok upload the file
  159. if($typeOK) {
  160. // switch based on error code
  161. switch($file['error']) {
  162. case 0:
  163. // check filename already exists
  164. $now = '';
  165. if(!file_exists($folder_url.'/'.$filename)) {
  166. // create full filename
  167. $full_url = $folder_url.'/'.$filename;
  168. $url = $rel_url.'/'.$filename;
  169. // upload the file
  170. $success = move_uploaded_file($file['tmp_name'], $url);
  171. } else {
  172. // create unique filename and upload file
  173. ini_set('date.timezone', 'Europe/London');
  174. $now = date('Y-m-d-His');
  175. $full_url = $folder_url.'/'.$now.$filename;
  176. $url = $rel_url.'/'.$now.$filename;
  177. $success = move_uploaded_file($file['tmp_name'], $url);
  178. }
  179. // if upload was successful
  180. if($success) {
  181. // save the url of the file
  182. $result['urls'][] = $url;
  183. $result['filename'] = $now.$filename;
  184. $result['size'] = $file['size'];
  185. $result['type'] = $file['type'];
  186. } else {
  187. $result['errors'][] = "Error uploaded $filename. Please try again.";
  188. }
  189. break;
  190. case 3:
  191. // an error occured
  192. $result['errors'][] = "Error uploading $filename. Please try again.";
  193. break;
  194. default:
  195. // an error occured
  196. $result['errors'][] = "System error uploading $filename. Contact webmaster.";
  197. break;
  198. }
  199. } elseif($file['error'] == 4) {
  200. // no file was selected for upload
  201. $result['nofiles'][] = "No file Selected";
  202. } else {
  203. // unacceptable file type
  204. $result['errors'][] = "$filename cannot be uploaded. Acceptable file types: gif, jpg, png.";
  205. }
  206. }
  207. return $result;
  208. }
  209. function deleteFile($folder, $filename){
  210. @unlink(WWW_ROOT . $folder . DS . $filename);
  211. }
  212. function resize_img($tempFile, $size, $newFile) {
  213. $filetype = $this->getFileExtension($tempFile);
  214. $filetype = strtolower($filetype);
  215. switch($filetype) {
  216. case "jpeg":
  217. case "jpg":
  218. $img_src = imagecreatefromjpeg($tempFile);
  219. break;
  220. case "gif":
  221. $img_src = imagecreatefromgif ($tempFile);
  222. break;
  223. case "png":
  224. $img_src = imagecreatefrompng ($tempFile);
  225. case "bmp":
  226. $img_src = imagecreatefromwbmp ($tempFile);
  227. break;
  228. }
  229. $true_width = imagesx($img_src);
  230. $true_height = imagesy($img_src);
  231. $size = explode('x',strtolower($size));
  232. if ($true_width>=$true_height) {
  233. $width=$size[0];
  234. $height = ($width/$true_width)*$true_height;
  235. }
  236. else {
  237. $height=$size[1];
  238. $width = ($height/$true_height)*$true_width;
  239. }
  240. $img_des = imagecreatetruecolor($width,$height);
  241. imagecopyresampled ($img_des, $img_src, 0, 0, 0, 0, $width, $height, $true_width, $true_height);
  242. // Save the resized image
  243. switch($filetype) {
  244. case "jpeg":
  245. case "jpg":
  246. imagejpeg($img_des,$newFile,80);
  247. break;
  248. case "gif":
  249. imagegif($img_des,$newFile,80);
  250. break;
  251. case "png":
  252. imagepng($img_des,$newFile,80);
  253. case "bmp":
  254. imagewbmp($img_des,$newFile,80);
  255. break;
  256. }
  257. }
  258. function getFileExtension($str) {
  259. $i = strrpos($str,".");
  260. if (!$i) { return ""; }
  261. $l = strlen($str) - $i;
  262. $ext = substr($str,$i+1,$l);
  263. return $ext;
  264. }
  265. }
  266. ?>