PageRenderTime 33ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/zan/classes/files.php

http://github.com/MilkZoft/ZanPHP
PHP | 390 lines | 383 code | 7 blank | 0 comment | 6 complexity | ffe5e14147fdae9528a5eb0087f11ce9 MD5 | raw file
  1. <?php
  2. if (!defined("ACCESS")) {
  3. die("Error: You don't have permission to access here...");
  4. }
  5. class ZP_Files extends ZP_Load
  6. {
  7. public $fileError = null;
  8. public $filename = null;
  9. public $fileSize = null;
  10. public $fileTmp = null;
  11. public $fileType = null;
  12. public function __construct()
  13. {
  14. $this->helper("debugging");
  15. }
  16. public function createFiles($names = false, $files = false, $types = false, $sizes = false)
  17. {
  18. if (!is_array($names) and !is_array($files) and !is_array($types)) {
  19. return false;
  20. }
  21. for($i = 0; $i <= count($files) - 1; $i++) {
  22. $data = $files[$i];
  23. $type = $types[$i];
  24. ini_set("upload_max_filesize", "50M");
  25. ini_set("memory_limit", "256M");
  26. ini_set("max_execution_time", 300);
  27. $parts = explode(".", $names[$i]);
  28. $filename = substr(sha1($parts[0]), 0, 15);
  29. $extension = end($parts);
  30. $dir = "unknown";
  31. switch($type) {
  32. case 'image/jpeg':
  33. $extension = "jpg";
  34. $dir = "images";
  35. break;
  36. case 'image/png':
  37. $extension = "png";
  38. $dir = "images";
  39. break;
  40. case 'image/gif':
  41. $extension = "gif";
  42. $dir = "images";
  43. break;
  44. case 'application/msword':
  45. $extension = "doc";
  46. $dir = "documents";
  47. break;
  48. case 'application/vnd.ms-powerpoint':
  49. $extension = "ppt";
  50. $dir = "documents";
  51. break;
  52. case 'application/vnd.ms-excel':
  53. $extension = "xls";
  54. $dir = "documents";
  55. break;
  56. case 'application/pdf':
  57. $extension = "pdf";
  58. $dir = "documents";
  59. break;
  60. case 'text/plain':
  61. $extension = "txt";
  62. $dir = "documents";
  63. break;
  64. case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':
  65. $extension = "docx";
  66. $dir = "documents";
  67. break;
  68. case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
  69. $extension = "xlsx";
  70. $dir = "documents";
  71. break;
  72. case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
  73. $extension = "pptx";
  74. $dir = "documents";
  75. break;
  76. case 'application/zip':
  77. $extension = "zip";
  78. $dir = "documents";
  79. break;
  80. case 'text/php':
  81. $extension = "php";
  82. $dir = "codes";
  83. break;
  84. case 'text/html':
  85. $extension = "html";
  86. $dir = "codes";
  87. break;
  88. case 'text/javascript':
  89. $extension = "js";
  90. $dir = "codes";
  91. break;
  92. case 'text/css':
  93. $extension = "css";
  94. $dir = "codes";
  95. break;
  96. case 'audio/mp3':
  97. $extension = "mp3";
  98. $dir = "audio";
  99. break;
  100. case 'video/mp4':
  101. $extension = "mp4";
  102. $dir = "videos";
  103. break;
  104. case 'octet-stream':
  105. $extension = "exe";
  106. $dir = "programs";
  107. break;
  108. }
  109. $data = str_replace("data:$type;base64,", "", $data);
  110. $data = str_replace(" ", "+", $data);
  111. $data = base64_decode($data);
  112. if (file_exists("www/lib/files/$dir/$filename.$extension")) {
  113. $filename = substr(sha1(code(10)), 0, 15);
  114. }
  115. file_put_contents("www/lib/files/$dir/$filename.$extension", $data);
  116. if (file_exists("www/lib/files/$dir/$filename.$extension")) {
  117. $f[$i] = array(
  118. "filename" => $names[$i],
  119. "url" => "www/lib/files/$dir/$filename.$extension",
  120. "category" => $dir,
  121. "size" => $sizes[$i]
  122. );
  123. } else {
  124. return false;
  125. }
  126. }
  127. return $f;
  128. }
  129. public function deleteFiles($files)
  130. {
  131. if (is_array($files)) {
  132. foreach ($files as $file) {
  133. @unlink($file);
  134. }
  135. return true;
  136. } else {
  137. return false;
  138. }
  139. }
  140. public function getFileInformation($filename = false)
  141. {
  142. if (!$this->filename and !$filename) {
  143. return false;
  144. } else {
  145. $filename = ($this->filename) ? $this->filename : $filename;
  146. }
  147. $file["icon"] = null;
  148. $parts = explode(".", $filename);
  149. if (is_array($parts)) {
  150. $file["name"] = $parts[0];
  151. $file["extension"] = array_pop($parts);
  152. $audio = array("wav", "midi", "mid", "mp3", "wma");
  153. $codes = array("asp", "php", "c", "as", "html", "js", "css", "rb");
  154. $document = array("csv", "doc", "docx", "pdf", "ppt", "pptx", "txt", "xls", "xlsx");
  155. $image = array("jpg", "jpeg", "png", "gif", "bmp");
  156. $programs = array("7z", "ai", "cdr", "fla", "exe", "dmg", "pkg", "iso", "msi", "psd", "rar", "svg", "swf", "zip");
  157. $video = array("mpg", "mpeg", "avi", "wmv", "asf", "mp4", "flv", "mov");
  158. if (in_array(strtolower($file["extension"]), $audio)) {
  159. $file["type"] = "audio";
  160. } elseif (in_array(strtolower($file["extension"]), $codes)) {
  161. $file["type"] = "code";
  162. } elseif (in_array(strtolower($file["extension"]), $document)) {
  163. $file["type"] = "document";
  164. } elseif (in_array(strtolower($file["extension"]), $image)) {
  165. $file["type"] = "image";
  166. } elseif (in_array(strtolower($file["extension"]), $video)) {
  167. $file["type"] = "program";
  168. } elseif (in_array(strtolower($file["extension"]), $video)) {
  169. $file["type"] = "video";
  170. } else {
  171. $file["type"] = "unknown";
  172. }
  173. $icons = array(
  174. "txt" => array(_get("webURL") ."www/lib/images/icons/files/text.png", __("Text File")),
  175. "doc" => array(_get("webURL") ."/www/lib/images/icons/files/doc.png", __("Document File")),
  176. "docx" => array(_get("webURL") ."/www/lib/images/icons/files/doc.png", __("Document File")),
  177. "pdf" => array(_get("webURL") ."/www/lib/images/icons/files/pdf.png", __("PDF File")),
  178. "ppt" => array(_get("webURL") ."/www/lib/images/icons/files/ppt.png", __("Power Point File")),
  179. "pptx" => array(_get("webURL") ."/www/lib/images/icons/files/ppt.png", __("Power Point File")),
  180. "rar" => array(_get("webURL") ."/www/lib/images/icons/files/rar.png", __("WinRAR File")),
  181. "iso" => array(_get("webURL") ."/www/lib/images/icons/files/rar.png", __("ISO File")),
  182. "xls" => array(_get("webURL") ."/www/lib/images/icons/files/xls.png", __("Excel File")),
  183. "xlsx" => array(_get("webURL") ."/www/lib/images/icons/files/xls.png", __("Excel File")),
  184. "csv" => array(_get("webURL") ."/www/lib/images/icons/files/xls.png", __("Excel File")),
  185. "zip" => array(_get("webURL") ."/www/lib/images/icons/files/zip.png", __("WinZIP File")),
  186. "7z" => array(_get("webURL") ."/www/lib/images/icons/files/7z.png", __("7z File")),
  187. "ai" => array(_get("webURL") ."/www/lib/images/icons/files/ai.png", __("Adobe Illustrator File")),
  188. "svg" => array(_get("webURL") ."/www/lib/images/icons/files/ai.png", __("Adobe Illustrator File")),
  189. "cdr" => array(_get("webURL") ."/www/lib/images/icons/files/cdr.png", __("Corel Draw File")),
  190. "msi" => array(_get("webURL") ."/www/lib/images/icons/files/exe.png", __("Executable File")),
  191. "exe" => array(_get("webURL") ."/www/lib/images/icons/files/exe.png", __("Executable File")),
  192. "dmg" => array(_get("webURL") ."/www/lib/images/icons/files/exe.png", __("Executable File")),
  193. "pkg" => array(_get("webURL") ."/www/lib/images/icons/files/exe.png", __("Executable File")),
  194. );
  195. foreach($icons as $extension => $icon) {
  196. if ($file["extension"] === $extension) {
  197. $file["icon"] = $icon;
  198. break;
  199. }
  200. }
  201. return $file;
  202. }
  203. return false;
  204. }
  205. public function upload($path = null, $type = "image")
  206. {
  207. ini_set("post_max_size", 18388608);
  208. ini_set("upload_max_filesize", 18388608);
  209. ini_set("max_execution_time", "1000");
  210. ini_set("max_input_time", "1000");
  211. $file = $this->getFileInformation();
  212. if (!$file) {
  213. $error["upload"] = false;
  214. $error["message"] = "A problem occurred when trying to upload file";
  215. return $error;
  216. }
  217. if (strlen($file["name"]) > 50) {
  218. $filename = code(5, false) ."_". slug($file["name"]) .".". $file["extension"];
  219. } else {
  220. $filename = slug($file["name"]) .".". $file["extension"];
  221. }
  222. $URL = $path . $filename;
  223. if (file_exists($URL)) {
  224. $error = array(
  225. "upload" => false,
  226. "message" => "The file already exists",
  227. "filename" => $filename
  228. );
  229. } elseif ($this->fileSize > FILE_SIZE) {
  230. $error = array(
  231. "upload" => false,
  232. "message" => "The file size exceed the permited limit"
  233. );
  234. } elseif ($this->fileError === 1) {
  235. $error = array(
  236. "upload" => false,
  237. "message" => "An error has ocurred"
  238. );
  239. } elseif ($file["type"] !== $type) {
  240. $error = array(
  241. "upload" => false,
  242. "message" => "The file type is not permited"
  243. );
  244. } elseif (move_uploaded_file($this->fileTmp, $URL)) {
  245. chmod($URL, 0777);
  246. $error = array(
  247. "upload" => true,
  248. "message" => "The file has been upload correctly",
  249. "filename" => $filename
  250. );
  251. } else {
  252. $error = array(
  253. "upload" => false,
  254. "message" => "A problem occurred when trying to upload file"
  255. );
  256. }
  257. return $error;
  258. }
  259. public function uploadImage($dir, $name = "file", $type = "resize", $sizes = array("t", "s", "m", "l", "o"))
  260. {
  261. if (!is_dir($dir)) {
  262. @mkdir($dir, 0777);
  263. }
  264. if (FILES($name, "name")) {
  265. $this->filename = FILES($name, "name");
  266. $this->fileType = FILES($name, "type");
  267. $this->fileSize = FILES($name, "size");
  268. $this->fileError = FILES($name, "error");
  269. $this->fileTmp = FILES($name, "tmp_name");
  270. } else {
  271. return false;
  272. }
  273. $upload = $this->upload($dir);
  274. if (!$upload["upload"]) {
  275. return false;
  276. }
  277. $this->Images = $this->core("Images");
  278. $this->Images->load($dir . $upload["filename"]);
  279. if ($type === "normal") {
  280. return $dir . $upload["filename"];
  281. } elseif ($type === "resize") {
  282. if (isset($sizes["t"])) {
  283. $size["thumbnail"] = $this->Images->getResize("thumbnail", $dir, $upload["filename"], MIN_THUMBNAIL, MAX_THUMBNAIL);
  284. }
  285. if (isset($sizes["s"])) {
  286. $size["small"] = $this->Images->getResize("small", $dir, $upload["filename"]);
  287. }
  288. if (isset($sizes["m"])) {
  289. $size["medium"] = $this->Images->getResize("medium", $dir, $upload["filename"], MIN_MEDIUM, MAX_MEDIUM);
  290. }
  291. if (isset($sizes["l"])) {
  292. $size["large"] = $this->Images->getResize("large", $dir, $upload["filename"], MIN_LARGE, MAX_LARGE);
  293. }
  294. if (isset($sizes["o"])) {
  295. $size["original"] = $dir . $upload["filename"];
  296. }
  297. return $size;
  298. } elseif ($type === "mural") {
  299. if ($this->Images->getWidth() !== MURAL_WIDTH and $this->Images->getHeight() !== MURAL_HEIGHT) {
  300. unlink($dir . $upload["filename"]);
  301. $size = MURAL_WIDTH ."x". MURAL_HEIGHT . __(" exactly.");
  302. $alert["alert"] = getAlert(__("The mural image's resolution must be ") . $size);
  303. return $alert;
  304. } else {
  305. return $dir . $upload["filename"];
  306. }
  307. }
  308. }
  309. public function resize($dir, $filename, $thumbnail = true, $small = true, $medium = true)
  310. {
  311. $this->Images = $this->core("Images");
  312. return array(
  313. "thumbnail" => ($thumbnail) ? $this->Images->getResize("thumbnail", $dir, $filename) : null,
  314. "small" => ($small) ? $this->Images->getResize("small", $dir, $filename) : null,
  315. "medium" => ($medium) ? $this->Images->getResize("medium", $dir, $filename) : null
  316. );
  317. }
  318. public function createFileFromBase64($data, $filename = false)
  319. {
  320. $start = strpos($data, ",") + 1;
  321. $base64 = substr($data, $start);
  322. $base64 = str_replace(" ", "+", $base64);
  323. $data = base64_decode($base64);
  324. if (is_string($filename)) {
  325. if (file_put_contents($filename, $data, LOCK_EX) === false) {
  326. return false;
  327. }
  328. if (file_exists($filename)) {
  329. return true;
  330. } else {
  331. return false;
  332. }
  333. }
  334. return $data;
  335. }
  336. }