PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/FileManager/Model/Attachment.php

https://github.com/kareypowell/croogo
PHP | 132 lines | 71 code | 15 blank | 46 comment | 11 complexity | 2d646d843673716bddfbd69d96f5add3 MD5 | raw file
  1. <?php
  2. App::uses('Node', 'Nodes.Model');
  3. /**
  4. * Attachment Model
  5. *
  6. * @category FileManager.Model
  7. * @package Croogo.FileManager.Model
  8. * @version 1.0
  9. * @author Fahad Ibnay Heylaal <contact@fahad19.com>
  10. * @license http://www.opensource.org/licenses/mit-license.php The MIT License
  11. * @link http://www.croogo.org
  12. */
  13. class Attachment extends Node {
  14. /**
  15. * alias
  16. */
  17. public $alias = 'Attachment';
  18. /**
  19. * useTable
  20. */
  21. public $useTable = 'nodes';
  22. /**
  23. * type
  24. */
  25. public $type = 'attachment';
  26. /**
  27. * Uploads directory
  28. *
  29. * relative to the webroot.
  30. *
  31. * @var string
  32. * @access public
  33. */
  34. public $uploadsDir = 'uploads';
  35. /**
  36. * Save uploaded file
  37. *
  38. * @param array $data data as POSTed from form
  39. * @return array|boolean false for errors or array containing fields to save
  40. */
  41. protected function _saveUploadedFile($data) {
  42. $file = $data[$this->alias]['file'];
  43. unset($data[$this->alias]['file']);
  44. // check if file with same path exists
  45. $destination = WWW_ROOT . $this->uploadsDir . DS . $file['name'];
  46. if (file_exists($destination)) {
  47. $newFileName = String::uuid() . '-' . $file['name'];
  48. $destination = WWW_ROOT . $this->uploadsDir . DS . $newFileName;
  49. } else {
  50. $newFileName = $file['name'];
  51. }
  52. // remove the extension for title
  53. if (explode('.', $file['name']) > 0) {
  54. $fileTitleE = explode('.', $file['name']);
  55. array_pop($fileTitleE);
  56. $fileTitle = implode('.', $fileTitleE);
  57. } else {
  58. $fileTitle = $file['name'];
  59. }
  60. $data[$this->alias]['title'] = $fileTitle;
  61. $data[$this->alias]['slug'] = $newFileName;
  62. $data[$this->alias]['body'] = '';
  63. $data[$this->alias]['mime_type'] = $file['type'];
  64. $data[$this->alias]['type'] = $this->type;
  65. $data[$this->alias]['path'] = '/' . $this->uploadsDir . '/' . $newFileName;
  66. // move the file
  67. $moved = move_uploaded_file($file['tmp_name'], $destination);
  68. if ($moved) {
  69. return $data;
  70. }
  71. return false;
  72. }
  73. /**
  74. * Saves model data
  75. *
  76. * @see Model::save()
  77. */
  78. public function save($data = null, $validate = true, $fieldList = array()) {
  79. if (isset($data[$this->alias]['file']['tmp_name'])) {
  80. $data = $this->_saveUploadedFile($data);
  81. }
  82. if (!$data) {
  83. return $this->invalidate('file', __d('croogo', 'Error during file upload'));
  84. }
  85. return parent::save($data, $validate, $fieldList);
  86. }
  87. /**
  88. * Removes record for given ID.
  89. *
  90. * @see Model::delete()
  91. */
  92. public function delete($id = null, $cascade = true) {
  93. $attachment = $this->find('first', array(
  94. 'conditions' => array(
  95. $this->alias . '.id' => $id,
  96. $this->alias . '.type' => $this->type,
  97. ),
  98. ));
  99. $filename = $attachment[$this->alias]['slug'];
  100. $uploadsDir = WWW_ROOT . $this->uploadsDir . DS;
  101. $fullpath = $uploadsDir . DS . $filename;
  102. if (file_exists($fullpath)) {
  103. $result = unlink($fullpath);
  104. if ($result) {
  105. $info = pathinfo($filename);
  106. array_map('unlink', glob(
  107. $uploadsDir . DS . 'resized' . DS . $info['filename'] . '.resized-*.' . $info['extension']
  108. ));
  109. return parent::delete($id, $cascade);
  110. } else {
  111. return false;
  112. }
  113. } else {
  114. return parent::delete($id, $cascade);
  115. }
  116. }
  117. }