/admin/controller/common/filemanager.php
PHP | 527 lines | 392 code | 135 blank | 0 comment | 119 complexity | 9e3da27ed03ab15817f68dd3ab9ea6d2 MD5 | raw file
Possible License(s): GPL-3.0
- <?php
- class ControllerCommonFileManager extends Controller {
- private $error = array();
-
- public function index() {
- $this->load_language('common/filemanager');
-
- $this->data['title'] = $this->language->get('heading_title');
-
- if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
- $this->data['base'] = HTTPS_SERVER;
- } else {
- $this->data['base'] = HTTP_SERVER;
- }
-
- $this->data['error_select'] = $this->language->get('error_select');
- $this->data['error_directory'] = $this->language->get('error_directory');
-
- $this->data['token'] = $this->session->data['token'];
-
- $this->data['directory'] = HTTP_IMAGE . 'data/';
-
- if (isset($this->request->get['field'])) {
- $this->data['field'] = $this->request->get['field'];
- } else {
- $this->data['field'] = '';
- }
-
- if (isset($this->request->get['CKEditorFuncNum'])) {
- $this->data['fckeditor'] = $this->request->get['CKEditorFuncNum'];
- } else {
- $this->data['fckeditor'] = false;
- }
-
- $this->template = 'common/filemanager.tpl';
-
- $this->response->setOutput($this->render());
- }
-
- public function manager() {
- $this->load_language('common/filemanager');
-
- $this->data['title'] = $this->language->get('heading_title');
- $this->data['error_select'] = $this->language->get('error_select');
- $this->data['error_directory'] = $this->language->get('error_directory');
-
- if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
- $this->data['base'] = HTTPS_SERVER;
- } else {
- $this->data['base'] = HTTP_SERVER;
- }
-
- $this->data['token'] = $this->session->data['token'];
-
- $this->data['directory'] = HTTP_IMAGE . 'data/';
-
- if (isset($this->request->get['field'])) {
- $this->data['field'] = $this->request->get['field'];
- } else {
- $this->data['field'] = '';
- }
-
- if (isset($this->request->get['CKEditorFuncNum'])) {
- $this->data['fckeditor'] = $this->request->get['CKEditorFuncNum'];
- } else {
- $this->data['fckeditor'] = false;
- }
-
- $this->template = 'common/fullfilemanager.tpl';
-
- $this->response->setOutput($this->render());
- }
-
-
- public function image() {
- $this->load->model('tool/image');
-
- if (isset($this->request->post['image'])) {
- $this->response->setOutput($this->model_tool_image->resize($this->request->post['image'], 100, 100));
- }
- }
-
- public function directory() {
- $json = array();
-
- if (isset($this->request->post['directory'])) {
- $directories = glob(rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['directory']), '/') . '/*', GLOB_ONLYDIR);
-
- if ($directories) {
- $i = 0;
-
- foreach ($directories as $directory) {
- $json[$i]['data'] = basename($directory);
- $json[$i]['attributes']['directory'] = substr($directory, strlen(DIR_IMAGE . 'data/'));
-
- $children = glob(rtrim($directory, '/') . '/*', GLOB_ONLYDIR);
-
- if ($children) {
- $json[$i]['children'] = ' ';
- }
-
- $i++;
- }
- }
- }
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
-
- public function files() {
- $json = array();
-
- $this->load->model('tool/image');
-
- if (isset($this->request->post['directory']) && $this->request->post['directory']) {
- $directory = DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['directory']);
- } else {
- $directory = DIR_IMAGE . 'data/';
- }
-
- $allowed = array(
- '.jpg',
- '.jpeg',
- '.png',
- '.gif'
- );
-
- $files = glob(rtrim($directory, '/') . '/*');
-
- if ($files) {
- foreach ($files as $file) {
- if (is_file($file)) {
- $ext = strrchr($file, '.');
- } else {
- $ext = '';
- }
-
- if (in_array(strtolower($ext), $allowed)) {
- $size = filesize($file);
-
- $i = 0;
-
- $suffix = array(
- 'B',
- 'KB',
- 'MB',
- 'GB',
- 'TB',
- 'PB',
- 'EB',
- 'ZB',
- 'YB'
- );
-
- while (($size / 1024) > 1) {
- $size = $size / 1024;
- $i++;
- }
-
- $json[] = array(
- 'file' => substr($file, strlen(DIR_IMAGE . 'data/')),
- 'filename' => basename($file),
- 'size' => round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i],
- 'thumb' => $this->model_tool_image->resize(substr($file, strlen(DIR_IMAGE)), 100, 100)
- );
- }
- }
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
-
- public function create() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['directory'])) {
- if (isset($this->request->post['name']) || $this->request->post['name']) {
- $directory = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['directory']), '/');
-
- if (!is_dir($directory)) {
- $json['error'] = $this->language->get('error_directory');
- }
-
- if (file_exists($directory . '/' . str_replace('../', '', $this->request->post['name']))) {
- $json['error'] = $this->language->get('error_exists');
- }
- } else {
- $json['error'] = $this->language->get('error_name');
- }
- } else {
- $json['error'] = $this->language->get('error_directory');
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- mkdir($directory . '/' . str_replace('../', '', $this->request->post['name']), 0777);
-
- $json['success'] = $this->language->get('text_create');
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
-
- public function delete() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['path'])) {
- $path = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['path']), '/');
-
- if (!file_exists($path)) {
- $json['error'] = $this->language->get('error_select');
- }
-
- if ($path == rtrim(DIR_IMAGE . 'data/', '/')) {
- $json['error'] = $this->language->get('error_delete');
- }
- } else {
- $json['error'] = $this->language->get('error_select');
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- if (is_file($path)) {
- unlink($path);
- } elseif (is_dir($path)) {
- $this->recursiveDelete($path);
- }
-
- $json['success'] = $this->language->get('text_delete');
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
- protected function recursiveDelete($directory) {
- if (is_dir($directory)) {
- $handle = opendir($directory);
- }
-
- if (!$handle) {
- return false;
- }
-
- while (false !== ($file = readdir($handle))) {
- if ($file != '.' && $file != '..') {
- if (!is_dir($directory . '/' . $file)) {
- unlink($directory . '/' . $file);
- } else {
- $this->recursiveDelete($directory . '/' . $file);
- }
- }
- }
-
- closedir($handle);
-
- rmdir($directory);
-
- return true;
- }
- public function move() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['from']) && isset($this->request->post['to'])) {
- $from = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['from']), '/');
-
- if (!file_exists($from)) {
- $json['error'] = $this->language->get('error_missing');
- }
-
- if ($from == DIR_IMAGE . 'data') {
- $json['error'] = $this->language->get('error_default');
- }
-
- $to = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['to']), '/');
- if (!file_exists($to)) {
- $json['error'] = $this->language->get('error_move');
- }
-
- if (file_exists($to . '/' . basename($from))) {
- $json['error'] = $this->language->get('error_exists');
- }
- } else {
- $json['error'] = $this->language->get('error_directory');
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- rename($from, $to . '/' . basename($from));
-
- $json['success'] = $this->language->get('text_move');
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
-
- public function copy() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['path']) && isset($this->request->post['name'])) {
- if ((strlen(utf8_decode($this->request->post['name'])) < 1) || (strlen(utf8_decode($this->request->post['name'])) > 255)) {
- $json['error'] = $this->language->get('error_filename');
- }
-
- $old_name = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['path']), '/');
-
- if (!file_exists($old_name) || $old_name == DIR_IMAGE . 'data') {
- $json['error'] = $this->language->get('error_copy');
- }
-
- if (is_file($old_name)) {
- $ext = strrchr($old_name, '.');
- } else {
- $ext = '';
- }
-
- $new_name = dirname($old_name) . '/' . str_replace('../', '', $this->request->post['name'] . $ext);
-
- if (file_exists($new_name)) {
- $json['error'] = $this->language->get('error_exists');
- }
- } else {
- $json['error'] = $this->language->get('error_select');
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- if (is_file($old_name)) {
- copy($old_name, $new_name);
- } else {
- $this->recursiveCopy($old_name, $new_name);
- }
-
- $json['success'] = $this->language->get('text_copy');
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
- function recursiveCopy($source, $destination) {
- $directory = opendir($source);
-
- @mkdir($destination);
-
- while (false !== ($file = readdir($directory))) {
- if (($file != '.') && ($file != '..')) {
- if (is_dir($source . '/' . $file)) {
- $this->recursiveCopy($source . '/' . $file, $destination . '/' . $file);
- } else {
- copy($source . '/' . $file, $destination . '/' . $file);
- }
- }
- }
-
- closedir($directory);
- }
- public function folders() {
- $this->response->setOutput($this->recursiveFolders(DIR_IMAGE . 'data/'));
- }
-
- protected function recursiveFolders($directory) {
- $output = '';
-
- $output .= '<option value="' . substr($directory, strlen(DIR_IMAGE . 'data/')) . '">' . substr($directory, strlen(DIR_IMAGE . 'data/')) . '</option>';
-
- $directories = glob(rtrim(str_replace('../', '', $directory), '/') . '/*', GLOB_ONLYDIR);
-
- foreach ($directories as $directory) {
- $output .= $this->recursiveFolders($directory);
- }
-
- return $output;
- }
-
- public function rename() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['path']) && isset($this->request->post['name'])) {
- if ((strlen(utf8_decode($this->request->post['name'])) < 1) || (strlen(utf8_decode($this->request->post['name'])) > 255)) {
- $json['error'] = $this->language->get('error_filename');
- }
-
- $old_name = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['path']), '/');
-
- if (!file_exists($old_name) || $old_name == DIR_IMAGE . 'data') {
- $json['error'] = $this->language->get('error_rename');
- }
-
- if (is_file($old_name)) {
- $ext = strrchr($old_name, '.');
- } else {
- $ext = '';
- }
-
- $new_name = dirname($old_name) . '/' . str_replace('../', '', $this->request->post['name'] . $ext);
-
- if (file_exists($new_name)) {
- $json['error'] = $this->language->get('error_exists');
- }
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- rename($old_name, $new_name);
-
- $json['success'] = $this->language->get('text_rename');
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
-
- public function upload() {
- $this->load_language('common/filemanager');
-
- $json = array();
-
- if (isset($this->request->post['directory'])) {
- if (isset($this->request->files['image']) && $this->request->files['image']['tmp_name']) {
- if ((strlen(utf8_decode($this->request->files['image']['name'])) < 1) || (strlen(utf8_decode($this->request->files['image']['name'])) > 255)) {
- $json['error'] = $this->language->get('error_filename');
- }
-
- $directory = rtrim(DIR_IMAGE . 'data/' . str_replace('../', '', $this->request->post['directory']), '/');
-
- if (!is_dir($directory)) {
- $json['error'] = $this->language->get('error_directory');
- }
-
- if ($this->request->files['image']['size'] > 300000) {
- $json['error'] = $this->language->get('error_file_size');
- }
-
- $allowed = array(
- 'image/jpeg',
- 'image/pjpeg',
- 'image/png',
- 'image/x-png',
- 'image/gif',
- 'application/x-shockwave-flash'
- );
-
- if (!in_array($this->request->files['image']['type'], $allowed)) {
- $json['error'] = $this->language->get('error_file_type');
- }
-
- $allowed = array(
- '.jpg',
- '.jpeg',
- '.gif',
- '.png',
- '.flv'
- );
-
- if (!in_array(strtolower(strrchr($this->request->files['image']['name'], '.')), $allowed)) {
- $json['error'] = $this->language->get('error_file_type');
- }
-
- if ($this->request->files['image']['error'] != UPLOAD_ERR_OK) {
- $json['error'] = 'error_upload_' . $this->request->files['image']['error'];
- }
- } else {
- $json['error'] = $this->language->get('error_file');
- }
- } else {
- $json['error'] = $this->language->get('error_directory');
- }
-
- if (!$this->user->hasPermission('modify', 'common/filemanager')) {
- $json['error'] = $this->language->get('error_permission');
- }
-
- if (!isset($json['error'])) {
- if (@move_uploaded_file($this->request->files['image']['tmp_name'], $directory . '/' . basename($this->request->files['image']['name']))) {
- $json['success'] = $this->language->get('text_uploaded');
- } else {
- $json['error'] = $this->language->get('error_uploaded');
- }
- }
-
- $this->load->library('json');
-
- $this->response->setOutput(Json::encode($json));
- }
- }
- ?>