PageRenderTime 32ms CodeModel.GetById 28ms RepoModel.GetById 0ms app.codeStats 1ms

/core/components/migx/processors/mgr/default/imageupload.php

https://gitlab.com/haque.mdmanzurul/nga-loyaltymatters
PHP | 287 lines | 196 code | 36 blank | 55 comment | 49 complexity | ccf677a02181af69b438c8186cd44682 MD5 | raw file
  1. <?php
  2. $config = $modx->migx->customconfigs;
  3. $resource_id = $modx->getOption('resource_id', $scriptProperties, '');
  4. $tvname = $modx->getOption('tv_name', $scriptProperties, '');
  5. if ($resource = $modx->getObject('modResource', $resource_id)) {
  6. $wctx = $resource->get('context_key');
  7. } else {
  8. $resource = $modx->newObject('modResource');
  9. }
  10. //set objectid for migxObjectMediaPath - snippet
  11. $co_id = $modx->getOption('co_id', $scriptProperties, '');
  12. if (!empty($co_id)) {
  13. $modx->setPlaceholder('objectid', $co_id);
  14. }
  15. if ($tv = $modx->getObject('modTemplateVar', array('name' => $tvname))) {
  16. $source = $tv->getSource($wctx, false);
  17. }
  18. if (!($source instanceof modMediaSource)) {
  19. $sourceid = $modx->getOption('source', $_REQUEST, '');
  20. /**
  21. * * * * @var modMediaSource $source */
  22. $modx->loadClass('sources.modMediaSource');
  23. $source = modMediaSource::getDefaultSource($modx, $sourceid);
  24. if (!$source->getWorkingContext()) {
  25. return $modx->lexicon('permission_denied');
  26. }
  27. $source->setRequestProperties($_REQUEST);
  28. }
  29. $result = array();
  30. if ($source instanceof modMediaSource) {
  31. $dirTree = $modx->getOption('dirtree', $_REQUEST, '');
  32. $modx->setPlaceholder('docid', $resource_id);
  33. $source->initialize();
  34. $cachepath = str_replace('/./', '/', $source->getBasePath());
  35. $cachepath = $cachepath . $dirTree;
  36. $baseUrl = $modx->getOption('site_url') . $source->getBaseUrl();
  37. $baseUrl = $baseUrl . $dirTree;
  38. $sourceProperties = $source->getPropertyList();
  39. //echo '<pre>' . print_r($sourceProperties,1) . '</pre>';
  40. $allowedExtensions = $modx->getOption('allowedFileTypes', $sourceProperties, '');
  41. $allowedExtensions = empty($allowedExtensions) ? 'jpg,jpeg,png,gif' : $allowedExtensions;
  42. $maxFilesizeMb = $modx->getOption('maxFilesizeMb', $sourceProperties, '8');
  43. $maxFiles = $modx->getOption('maxFiles', $sourceProperties, '0');
  44. $thumbX = $modx->getOption('thumbX', $sourceProperties, '100');
  45. $thumbY = $modx->getOption('thumbY', $sourceProperties, '100');
  46. $resizeConfigs = $modx->getOption('resizeconfigs', $sourceProperties, '');
  47. $resizeConfigs = $modx->fromJson($resizeConfigs);
  48. $thumbscontainer = $modx->getOption('thumbscontainer', $sourceProperties, 'thumbs/');
  49. $imageExtensions = $modx->getOption('imageExtensions', $sourceProperties, 'jpg,jpeg,png,gif,JPG');
  50. $imageExtensions = explode(',', $imageExtensions);
  51. $uniqueFilenames = $modx->getOption('uniqueFilenames', $sourceProperties, false);
  52. $onImageUpload = $modx->getOption('onImageUpload', $sourceProperties, '');
  53. $onImageRemove = $modx->getOption('onImageRemove', $sourceProperties, '');
  54. $cleanalias = $modx->getOption('cleanFilename', $sourceProperties, false);
  55. define('AIU_BASE_PATH', $modx->getOption('core_path') . 'components/migx/model/imageupload/');
  56. define('AIU_CACHE_PATH', $cachepath );
  57. include_once AIU_BASE_PATH . 'includes/fileuploader/fileuploader.class.php';
  58. /***************************/
  59. /* Set/Read Snippet Params */
  60. /***************************/
  61. // default: &language=`english` &allowedExtensions=`jpg,jpeg,png,gif` &maxFilesizeMb=`8` &uid=`site-specific` &maxFiles=`3` &thumbX=`100` &=`100` &mode=`form` &ajaxId=`0`
  62. $language = $modx->getOption('manager_language');
  63. // comma separated list of valid extensions
  64. $formUid = isset($uid) ? $uid : md5($modx->config['site_url']);
  65. if (!function_exists('includeFile')) {
  66. function includeFile($name, $type = 'config', $defaultName = 'default', $fileType = '.inc.php') {
  67. $folder = (substr($type, -1) != 'y') ? $type . 's/' : substr($folder, 0, -1) . 'ies/';
  68. $allowedConfigs = glob(AIU_BASE_PATH . $folder . '*.' . $type . $fileType);
  69. foreach ($allowedConfigs as $config) {
  70. $configs[] = preg_replace('=.*/' . $folder . '([^.]*).' . $type . $fileType . '=', '$1', $config);
  71. }
  72. if (in_array($name, $configs)) {
  73. return AIU_BASE_PATH . $folder . $name . '.' . $type . $fileType;
  74. } else {
  75. if (file_exists(AIU_BASE_PATH . $folder . $defaultName . '.' . $type . $fileType)) {
  76. return AIU_BASE_PATH . $folder . $defaultName . '.' . $type . $fileType;
  77. } else {
  78. $modx->messageQuit('Default AjaxImageUpload ' . $type . ' file "' . AIU_BASE_PATH . $folder . $defaultName . '.' . $type . '.inc.php" not found. Did you upload all snippet files?');
  79. }
  80. }
  81. }
  82. }
  83. include (includeFile($language, 'language', 'en'));
  84. $language['noSource'] = 'Mediasource missing';
  85. $allowedExtensions = explode(',', $allowedExtensions);
  86. $sizeLimit = intval($maxFilesizeMb) * 1024 * 1024;
  87. include_once AIU_BASE_PATH . 'includes/PhpThumbFactory/ThumbLib.inc.php';
  88. // delete uploaded images
  89. if (isset($_GET['delete'])) {
  90. $result = array();
  91. $formUid = (isset($_GET['uid'])) ? htmlentities(trim($_GET['uid']), ENT_NOQUOTES) : $formUid;
  92. if (strtolower($_GET['delete']) == 'all') {
  93. // delete all uploaded files/thumbs & clean session
  94. /*
  95. if (is_array($_SESSION['AjaxImageUpload'][$formUid])) {
  96. foreach ($_SESSION['AjaxImageUpload'][$formUid] as $key => $file) {
  97. unlink($file['path'] . $file['uniqueName']);
  98. unlink($file['path'] . $file['thumbName']);
  99. if (!empty($onImageRemove)){
  100. $modx->runSnippet($onImageRemove,array('action'=>'remove','name'=>$file['uniqueName']));
  101. }
  102. }
  103. }
  104. $_SESSION['AjaxImageUpload'][$formUid] = array();
  105. $result['success'] = true;
  106. $result['session'] = $_SESSION['AjaxImageUpload'][$formUid];
  107. */
  108. } else {
  109. // delete one uploaded file/thumb & remove session entry
  110. $file = $_GET['delete'];
  111. $success = $source->removeObject($dirTree . $file);
  112. if (empty($success)) {
  113. //file could not be removed, try to remove the thumb, if that succeeds set success to true
  114. if (file_exists(AIU_CACHE_PATH . $thumbscontainer . $dirTree)) {
  115. $success = $source->removeObject($dirTree . $thumbscontainer . $file);
  116. if (empty($success)) {
  117. $errors = $source->getErrors();
  118. $error = array();
  119. foreach ($errors as $k => $msg) {
  120. $error[] = $k . ':' . $msg;
  121. }
  122. $result['error'] = implode('', $error);
  123. } else {
  124. $result['success'] = true;
  125. }
  126. }
  127. } else {
  128. $source->removeObject($dirTree . $thumbscontainer . $file);
  129. $result['success'] = true;
  130. if (is_array($resizeConfigs) && count($resizeConfigs) > 0) {
  131. foreach ($resizeConfigs as $rc) {
  132. if (isset($rc['x']) && isset($rc['y'])) {
  133. $container = isset($rc['alias']) ? $rc['alias'] . '/' : $rc['x'] . 'x' . $rc['y'] . '/';
  134. $source->removeObject($dirTree . $container . $file);
  135. }
  136. }
  137. }
  138. if (!empty($onImageRemove)) {
  139. $modx->runSnippet($onImageRemove, array('action' => 'remove', 'name' => $file));
  140. }
  141. }
  142. /*
  143. if (isset($_SESSION['AjaxImageUpload'][$formUid][$fileId])) {
  144. $file = $_SESSION['AjaxImageUpload'][$formUid][$fileId];
  145. unlink($file['path'] . $file['uniqueName']);
  146. unset($_SESSION['AjaxImageUpload'][$formUid][$fileId]);
  147. $result['success'] = true;
  148. $result['session'] = $_SESSION['AjaxImageUpload'][$formUid];
  149. } else {
  150. $result['error'] = sprintf($language['notFound'], $maxFiles);
  151. }
  152. */
  153. }
  154. } else {
  155. $imageTpl = $modx->migx->config['corePath'] . '/model/imageupload/templates/image.template.html';
  156. $fileTpl = $modx->migx->config['corePath'] . '/model/imageupload/templates/file.template.html';
  157. if (!file_exists(AIU_CACHE_PATH)) {
  158. mkdir(AIU_CACHE_PATH, 0755);
  159. }
  160. // upload the image(s)
  161. $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
  162. $formUid = (isset($_GET['uid'])) ? htmlentities(trim($_GET['uid']), ENT_NOQUOTES) : $formUid;
  163. // to pass data through iframe you will need to encode all html tags
  164. $result = $uploader->handleUpload(AIU_CACHE_PATH, true, $language);
  165. // file successful uploaded
  166. if ($result['success']) {
  167. $originalName = $uploader->filename . '.' . $uploader->extension;
  168. $path = $uploader->path;
  169. // check if count of uploaded files are below max file count
  170. $files = $source->getObjectsInContainer($dirTree);
  171. if (empty($maxFiles) || count($files) < $maxFiles) {
  172. // create unique filename and unique thumbname
  173. if ($uniqueFilenames) {
  174. $uniqueName = md5($uploader->filename . time()) . '.' . $uploader->extension;
  175. //$thumbName = md5($uploader->filename . time() . '.thumb') . '.' . $uploader->extension;
  176. } else {
  177. $uniqueName = $uploader->filename . '.' . $uploader->extension;
  178. //$thumbName = $uploader->filename . '.thumb.' . $uploader->extension;
  179. }
  180. $ext = $uploader->extension;
  181. if ($cleanalias) {
  182. $uniqueName = $resource->cleanAlias($uniqueName);
  183. $ext = $resource->cleanAlias($uploader->extension);
  184. /*
  185. $org = $resource->cleanAlias($originalName);
  186. rename($path . $originalName, $path . $org);
  187. $originalName = $org;
  188. */
  189. }
  190. rename($path . $originalName, $path . $uniqueName);
  191. $result['filename'] = $baseUrl . $uniqueName;
  192. //$result['fileid'] = end(array_keys($_SESSION['AjaxImageUpload'][$formUid]));
  193. $result['url'] = $uniqueName;
  194. $placeholder = array();
  195. $placeholder['fullRelativeUrl'] = $result['filename'];
  196. $placeholder['url'] = $result['url'];
  197. $placeholder['name'] = $uniqueName;
  198. $placeholder['size'] = $uploader->filesize;
  199. $placeholder['lastmod'] = time();
  200. $placeholder['action'] = 'upload';
  201. if (!empty($onImageUpload)) {
  202. $modx->runSnippet($onImageUpload, $placeholder);
  203. }
  204. $result['microtime'] = str_replace(array(' ', '.'), array('', ''), microtime());
  205. $placeholder['deleteButton'] = '<div id="' . $result['microtime'] . '" class="delete-button"><a>' . $language['deleteButton'] . '</a></div>';
  206. if (in_array($ext, $imageExtensions)) {
  207. // generate thumbname
  208. if (!file_exists(AIU_CACHE_PATH . $thumbscontainer)) {
  209. mkdir(AIU_CACHE_PATH . $thumbscontainer, 0755);
  210. }
  211. $thumb = PhpThumbFactory::create($path . $uniqueName);
  212. $thumb->adaptiveResize($thumbX, $thumbY);
  213. $thumb->save($path . $thumbscontainer . $uniqueName);
  214. $result['filename'] = $baseUrl . $thumbscontainer . $uniqueName;
  215. $placeholder['fullRelativeUrl'] = $result['filename'];
  216. $result['html'] = $modx->migx->parseChunk($imageTpl, $placeholder);
  217. if (is_array($resizeConfigs) && count($resizeConfigs) > 0) {
  218. foreach ($resizeConfigs as $rc) {
  219. if (isset($rc['x']) && isset($rc['y'])) {
  220. $container = isset($rc['alias']) ? $rc['alias'] . '/' : $rc['x'] . 'x' . $rc['y'] . '/';
  221. if (!file_exists(AIU_CACHE_PATH . $container)) {
  222. mkdir(AIU_CACHE_PATH . $container, 0755);
  223. }
  224. $thumb = PhpThumbFactory::create($path . $uniqueName);
  225. if (isset($rc['crop']) && !empty($rc['crop'])) {
  226. $thumb->adaptiveResize($rc['x'], $rc['y']);
  227. } else {
  228. $thumb->resize($rc['x'], $rc['y']);
  229. }
  230. $thumb->save($path . $container . $uniqueName);
  231. }
  232. }
  233. }
  234. } else {
  235. $result['html'] = $modx->migx->parseChunk($fileTpl, $placeholder);
  236. }
  237. } else {
  238. unset($result['success']);
  239. // error message
  240. $result['error'] = sprintf($language['maxFiles'], $maxFiles);
  241. // delete uploaded file
  242. unlink($path . $originalName);
  243. }
  244. }
  245. }
  246. } else {
  247. // error message
  248. $result['error'] = $language['noSource'];
  249. }
  250. echo $modx->toJson($result);
  251. exit;