PageRenderTime 43ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/wp-content/plugins/photo-gallery/filemanager/model.php

https://gitlab.com/edgarze188/sunrise
PHP | 280 lines | 207 code | 33 blank | 40 comment | 39 complexity | 3d05efa59d751bd14aea42867c7555e2 MD5 | raw file
  1. <?php
  2. /**
  3. * Author: Rob
  4. * Date: 6/24/13
  5. * Time: 11:31 AM
  6. */
  7. $p_dir;
  8. $s_order;
  9. class FilemanagerModel {
  10. ////////////////////////////////////////////////////////////////////////////////////////
  11. // Events //
  12. ////////////////////////////////////////////////////////////////////////////////////////
  13. ////////////////////////////////////////////////////////////////////////////////////////
  14. // Constants //
  15. ////////////////////////////////////////////////////////////////////////////////////////
  16. ////////////////////////////////////////////////////////////////////////////////////////
  17. // Variables //
  18. ////////////////////////////////////////////////////////////////////////////////////////
  19. private $controller;
  20. ////////////////////////////////////////////////////////////////////////////////////////
  21. // Constructor & Destructor //
  22. ////////////////////////////////////////////////////////////////////////////////////////
  23. public function __construct($controller) {
  24. $this->controller = $controller;
  25. }
  26. ////////////////////////////////////////////////////////////////////////////////////////
  27. // Public Methods //
  28. ////////////////////////////////////////////////////////////////////////////////////////
  29. public function get_file_manager_data() {
  30. $session_data = array();
  31. $session_data['sort_by'] = $this->get_from_session('sort_by', 'name');
  32. $session_data['sort_order'] = $this->get_from_session('sort_order', 'asc');
  33. $session_data['items_view'] = $this->get_from_session('items_view', 'thumbs');
  34. $session_data['clipboard_task'] = $this->get_from_session('clipboard_task', '');
  35. $session_data['clipboard_files'] = $this->get_from_session('clipboard_files', '');
  36. $session_data['clipboard_src'] = $this->get_from_session('clipboard_src', '');
  37. $session_data['clipboard_dest'] = $this->get_from_session('clipboard_dest', '');
  38. $data = array();
  39. $data['session_data'] = $session_data;
  40. $data['path_components'] = $this->get_path_components();
  41. $data['dir'] = (isset($_REQUEST['dir']) ? esc_html($_REQUEST['dir']) : '');
  42. $data['files'] = $this->get_files($session_data['sort_by'], $session_data['sort_order']);
  43. $data['media_library_files'] = ($this->controller->get_options_data()->enable_ML_import ? $this->get_media_library_files($session_data['sort_by'], $session_data['sort_order']) : array());
  44. $data['extensions'] = (isset($_REQUEST['extensions']) ? esc_html($_REQUEST['extensions']) : '');
  45. $data['callback'] = (isset($_REQUEST['callback']) ? esc_html($_REQUEST['callback']) : '');
  46. return $data;
  47. }
  48. ////////////////////////////////////////////////////////////////////////////////////////
  49. // Getters & Setters //
  50. ////////////////////////////////////////////////////////////////////////////////////////
  51. ////////////////////////////////////////////////////////////////////////////////////////
  52. // Private Methods //
  53. ////////////////////////////////////////////////////////////////////////////////////////
  54. private function get_from_session($key, $default) {
  55. // if (isset($_SESSION[$key])) {
  56. // if (isset($_REQUEST[$key])) {
  57. if (isset($_REQUEST[$key])) {
  58. // $_SESSION[$key] = $_REQUEST[$key];
  59. $_REQUEST[$key] = stripslashes($_REQUEST[$key]);
  60. }
  61. else {
  62. // $_SESSION[$key] = $default;
  63. $_REQUEST[$key] = stripslashes($default);
  64. }
  65. // return $_SESSION[$key];
  66. return esc_html(stripslashes($_REQUEST[$key]));
  67. // }
  68. // return '';
  69. }
  70. public function get_path_components() {
  71. $dir_names = explode('/', (isset($_REQUEST['dir']) ? esc_html($_REQUEST['dir']) : ''));
  72. $path = '';
  73. $components = array();
  74. $component = array();
  75. global $WD_BWG_UPLOAD_DIR;
  76. $component['name'] = $WD_BWG_UPLOAD_DIR;
  77. $component['path'] = $path;
  78. $components[] = $component;
  79. for ($i = 0; $i < count($dir_names); $i++) {
  80. $dir_name = $dir_names[$i];
  81. if ($dir_name == '') {
  82. continue;
  83. }
  84. $path .= (($path == '') ? $dir_name : '/' . $dir_name);
  85. $component = array();
  86. $component['name'] = $dir_name;
  87. $component['path'] = $path;
  88. $components[] = $component;
  89. }
  90. return $components;
  91. }
  92. function get_files($sort_by, $sort_order) {
  93. $icons_dir_path = WD_BWG_DIR . '/filemanager/images/file_icons';
  94. $icons_dir_url = WD_BWG_URL . '/filemanager/images/file_icons';
  95. $valid_types = explode(',', isset($_REQUEST['extensions']) ? strtolower(esc_html($_REQUEST['extensions'])) : '*');
  96. $parent_dir = $this->controller->get_uploads_dir() . (isset($_REQUEST['dir']) ? '/' . esc_html($_REQUEST['dir']) : '');
  97. $parent_dir_url = $this->controller->get_uploads_url() . (isset($_REQUEST['dir']) ? '/' . esc_html($_REQUEST['dir']) : '');
  98. $file_names = $this->get_sorted_file_names($parent_dir, $sort_by, $sort_order);
  99. $dirs = array();
  100. $files = array();
  101. foreach ($file_names as $file_name) {
  102. if (($file_name == '.') || ($file_name == '..') || ($file_name == 'thumb') || ($file_name == '.original')) {
  103. continue;
  104. }
  105. if (is_dir($parent_dir . '/' . $file_name) == TRUE) {
  106. $file = array();
  107. $file['is_dir'] = TRUE;
  108. $file['name'] = $file_name;
  109. $file['filename'] = $file_name;
  110. $file['type'] = '';
  111. $file['thumb'] = $icons_dir_url . '/dir.png';
  112. $file['icon'] = $icons_dir_url . '/dir.png';
  113. $file['size'] = '';
  114. $file['date_modified'] = '';
  115. $file['resolution'] = '';
  116. $dirs[] = $file;
  117. }
  118. else {
  119. $file = array();
  120. $file['is_dir'] = FALSE;
  121. $file['name'] = $file_name;
  122. $file['filename'] = substr($file_name, 0, strrpos($file_name, '.'));
  123. $file_extension = explode('.', $file_name);
  124. $file['type'] = strtolower(end($file_extension));
  125. $icon = $icons_dir_url . '/' . $file['type'] . '.png';
  126. if (file_exists($icons_dir_path . '/' . $file['type'] . '.png') == FALSE) {
  127. $icon = $icons_dir_url . '/' . '_blank.png';
  128. }
  129. $file['thumb'] = $this->is_img($file['type']) ? $parent_dir_url . '/thumb/' . $file_name : $icon;
  130. $file['icon'] = $icon;
  131. if (($valid_types[0] != '*') && (in_array($file['type'], $valid_types) == FALSE)) {
  132. continue;
  133. }
  134. $file_size_kb = (int)(filesize($parent_dir . '/' . $file_name) / 1024);
  135. // $file_size_mb = (int)($file_size_kb / 1024);
  136. // $file['size'] = $file_size_kb < 1024 ? (string)$file_size_kb . 'KB' : (string)$file_size_mb . 'MB';
  137. $file['size'] = $file_size_kb . ' KB';
  138. $file['date_modified'] = date('d F Y, H:i', filemtime($parent_dir . '/' . $file_name));
  139. $image_info = getimagesize(htmlspecialchars_decode($parent_dir . '/' . $file_name, ENT_COMPAT | ENT_QUOTES));
  140. $file['resolution'] = $this->is_img($file['type']) ? $image_info[0] . ' x ' . $image_info[1] . ' px' : '';
  141. $files[] = $file;
  142. }
  143. }
  144. $result = $sort_order == 'asc' ? array_merge($dirs, $files) : array_merge($files, $dirs);
  145. return $result;
  146. }
  147. function get_media_library_files($sort_by, $sort_order) {
  148. $icons_dir_path = WD_BWG_DIR . '/filemanager/images/file_icons';
  149. $icons_dir_url = WD_BWG_URL . '/filemanager/images/file_icons';
  150. $valid_types = explode(',', isset($_REQUEST['extensions']) ? strtolower(esc_html($_REQUEST['extensions'])) : '*');
  151. $upload_dir = wp_upload_dir();
  152. $parent_dir = $upload_dir['basedir'];
  153. $parent_dir_url = $upload_dir['baseurl'];
  154. $query_images_args = array(
  155. 'post_type' => 'attachment', 'post_mime_type' =>'image', 'post_status' => 'inherit', 'posts_per_page' => -1,
  156. );
  157. $query_images = new WP_Query( $query_images_args );
  158. $files = array();
  159. $upload_dir = wp_upload_dir();
  160. foreach ($query_images->posts as $image) {
  161. $file_meta = wp_get_attachment_metadata($image->ID);
  162. if (isset($file_meta['file'])) {
  163. $file = array();
  164. $file['is_dir'] = FALSE;
  165. $file_name_array = explode('/', $file_meta['file']);
  166. $file_name = end($file_name_array);
  167. $file['name'] = $file_name;
  168. $file['path'] = $file_meta['file'];
  169. $file['filename'] = substr($file_name, 0, strrpos($file_name, '.'));
  170. $file_type_array = explode('.', $file_name);
  171. $file['type'] = strtolower(end($file_type_array));
  172. // $file['thumb'] = wp_get_attachment_thumb_url($image->ID);
  173. if (!empty($file_meta['sizes']) && $file_meta['sizes']['thumbnail']['file']) {
  174. $file_pos = strrpos($file_meta['file'], '/');
  175. $sub_folder = substr($file_meta['file'], 0, $file_pos);
  176. $file['thumb'] = $upload_dir['baseurl'] . '/' . $sub_folder . '/' . $file_meta['sizes']['thumbnail']['file'];
  177. }
  178. else {
  179. $file['thumb'] = $upload_dir['baseurl'] . '/' . $file_meta['file'];
  180. }
  181. $file['icon'] = $file['thumb'];
  182. if (($valid_types[0] != '*') && (in_array($file['type'], $valid_types) == FALSE)) {
  183. continue;
  184. }
  185. $file_size_kb = (int)(@filesize($parent_dir . '/' . $file_meta['file']) / 1024);
  186. if (!$file_size_kb) continue;
  187. $file['size'] = $file_size_kb . ' KB';
  188. $file['date_modified'] = date('d F Y, H:i', filemtime($parent_dir . '/' . $file_meta['file']));
  189. // $image_info = getimagesize(htmlspecialchars_decode($parent_dir . '/' . $file_meta['file'], ENT_COMPAT | ENT_QUOTES));
  190. $file['resolution'] = $this->is_img($file['type']) ? $file_meta['width'] . ' x ' . $file_meta['height'] . ' px' : '';
  191. $files[] = $file;
  192. }
  193. }
  194. return $files;
  195. }
  196. private function get_sorted_file_names($parent_dir, $sort_by, $sort_order) {
  197. $file_names = scandir($parent_dir);
  198. global $p_dir;
  199. global $s_order;
  200. $p_dir = $parent_dir;
  201. $s_order = $sort_order;
  202. function sort_by_size ($a, $b) {
  203. global $p_dir;
  204. global $s_order;
  205. $size_of_a = filesize($p_dir . '/' . $a);
  206. $size_of_b = filesize($p_dir . '/' . $b);
  207. return $s_order == 'asc' ? $size_of_a > $size_of_b : $size_of_a < $size_of_b;
  208. }
  209. function sort_by_date($a, $b) {
  210. global $p_dir;
  211. global $s_order;
  212. $m_time_a = filemtime($p_dir . '/' . $a);
  213. $m_time_b = filemtime($p_dir . '/' . $b);
  214. return $s_order == 'asc' ? $m_time_a > $m_time_b : $m_time_a < $m_time_b;
  215. }
  216. switch ($sort_by) {
  217. case 'name':
  218. natcasesort($file_names);
  219. if ($sort_order == 'desc') {
  220. $file_names = array_reverse($file_names);
  221. }
  222. break;
  223. case 'size':
  224. usort($file_names, 'sort_by_size');
  225. break;
  226. case 'date_modified':
  227. usort($file_names, 'sort_by_date');
  228. break;
  229. }
  230. return $file_names;
  231. }
  232. private function is_img($file_type) {
  233. switch ($file_type) {
  234. case 'jpg':
  235. case 'jpeg':
  236. case 'png':
  237. case 'bmp':
  238. case 'gif':
  239. return true;
  240. break;
  241. }
  242. return false;
  243. }
  244. ////////////////////////////////////////////////////////////////////////////////////////
  245. // Listeners //
  246. ////////////////////////////////////////////////////////////////////////////////////////
  247. }