db->query('SELECT ID FROM users WHERE username = lower(?)', [$user])->result_array(); if(!empty($user)) { $userID = $user[0]['ID']; } } else if(is_integer($user)) { $userID = $user; } $this->db->query('INSERT INTO files (name, originalName, type, size, path, user) VALUES (?, ?, ?, ?, ?, ?)', [$name, $originalName, $type, $size, $path, $userID]); $this->db->cache_delete('admin', 'files'); } public function uploadFile($original_name, $tmpname, $size, $type, $userContent = true) { $target_dir = 'files' . DIRECTORY_SEPARATOR . ($userContent ? 'userContent' . DIRECTORY_SEPARATOR : ''); $filetype = pathinfo(basename($original_name), PATHINFO_EXTENSION); $name = $this->generateName(); $target_file = $target_dir . $name . '.' . $filetype; if (!move_uploaded_file($tmpname, $target_file)) { die('File couldn\'t be uploaded!'); } $target_file = str_replace('\\', '/', $target_file); $this->addToDatabase($name, $original_name, $type, $size, $target_file, $userContent); echo shell_exec('python /var/www/codeigniter/duplicates.py'); return "/f/" . $name; } public function uploadVideo($name, $max_size, $originalName, $max_width, $user = null) { $path = '.' . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR; if($user !== null) { $path .= 'userContent' . DIRECTORY_SEPARATOR . $user . DIRECTORY_SEPARATOR; } $config['upload_path'] = $path; if(!file_exists($path)) { mkdir($path, 0777); } $config['allowed_types'] = 'mp4'; $config['max_size'] = $max_size; $config['file_name'] = $this->generateName() . '.' . pathinfo(basename($originalName), PATHINFO_EXTENSION); $this->load->library('upload', $config); if(!$this->upload->do_upload($name)) { return null; } else { $data = $this->upload->data(); $this->upload->display_errors(); $this->addToDatabase($data['raw_name'], $originalName, $data['file_type'], $data['file_size'] * 1024, $this->getPath($data['file_name'], $user), $user); return '/f/' . $data['raw_name']; } } public function uploadImage($name, $max_size, $originalName, $max_width, $user = null) { $config['upload_path'] = '.' . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR; if($user != null) { $config['upload_path'] .= 'userContent' . DIRECTORY_SEPARATOR . $user . DIRECTORY_SEPARATOR; } $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = $max_size; $config['file_name'] = $this->generateName() . "." . pathinfo(basename($originalName), PATHINFO_EXTENSION); $this->load->library('upload', $config); if ( ! $this->upload->do_upload($name)) { return null; } else { $data = $this->upload->data(); // Resize $config['image_library'] = 'gd2'; $config['source_image'] = $data['full_path']; $config['maintain_ratio'] = TRUE; $config['width'] = $max_width; $this->load->library('image_lib', $config); $this->image_lib->resize(); $this->addToDatabase($data['raw_name'], $originalName, $data['file_type'], $data['file_size'] * 1024, $this->getPath($data['file_name'], $user), $user); echo shell_exec('python /var/www/codeigniter/duplicates.py'); return '/f/' . $data['raw_name']; } } public function uploadCroppedImage($name, $max_size, $originalname, $width, $height, $userContent = true) { $config['upload_path'] = '.' . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . ($userContent ? 'userContent' . DIRECTORY_SEPARATOR : ''); $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = $max_size; $config['file_name'] = $this->generateName() . "." . pathinfo(basename($originalname), PATHINFO_EXTENSION); $this->load->library('upload', $config); if ( ! $this->upload->do_upload($name)) { return null; } else { $data = $this->upload->data(); // Resize $config['image_library'] = 'gd2'; $config['source_image'] = $data['full_path']; $config['maintain_ratio'] = TRUE; $size = getimagesize($data['full_path']); if($size[0] > $size[1]) { $config['height'] = $height; } else { $config['width'] = $width; } $this->load->library('image_lib'); $this->image_lib->initialize($config); $this->image_lib->resize(); $config['source_image'] = $config['upload_path'] . $config['file_name']; $config['maintain_ratio'] = FALSE; $config['height'] = $height; $config['width'] = $width; $size = getimagesize($config['source_image']); if($size[0] > $size[1]) { $config['x_axis'] = ($size[0] - $width) / 2; } else { $config['y_axis'] = ($size[1] - $height) / 2; } $this->image_lib->clear(); $this->image_lib->initialize($config); $this->image_lib->crop(); $this->db->query('INSERT INTO files (name, original_name, type, size, path, isUserData) VALUES (?, ?, ?, ?, ?, ?)', [$data['raw_name'], $originalname, $data['file_type'], $data['file_size'] * 1024, $this->getPath($data['file_name'], $userContent), $userContent]); $this->db->cache_delete('admin', 'files'); echo shell_exec('python /var/www/codeigniter/duplicates.py'); return '/f/' . $data['raw_name']; } } public function uploadFileByContent($content, $original_name, $fullType, $fileSize, $userContent = true) { $target_dir = 'files' . DIRECTORY_SEPARATOR . ($userContent ? 'userContent' . DIRECTORY_SEPARATOR : ''); $filetype = pathinfo(basename($original_name), PATHINFO_EXTENSION); $name = $this->generateName(); $target_file = $target_dir . $name . '.' . $filetype; $fp = fopen($target_file, 'w'); fwrite($fp, $content); fclose($fp); $target_file = str_replace('\\', '/', $target_file); $this->db->query('INSERT INTO files (name, original_name, type, size, path, isUserData) VALUES (?, ?, ?, ?, ?, ?)', [$name, $original_name, $fullType, $fileSize, $target_file, $userContent]); $this->db->cache_delete('admin', 'files'); echo shell_exec('python /var/www/codeigniter/duplicates.py'); return '/f/' . $name; } public function generateName() { return md5(uniqid(rand(), true)); } public function getFileList() { $unfiltered_result = $this->db->query('SELECT * FROM files')->result_array(); $result = []; foreach ($unfiltered_result as $item) { $item['size'] = NumberHumanizer::binarySuffix(intval($item['size']), $_SESSION['site_lang']); $result[] = $item; } return $result; } public function getFileID($name, $userID = null) { $result = $this->db->query('SELECT ID FROM files WHERE name = ? AND user = ?', [$name, $userID])->result_array(); return $result; } public function getFilePath($name, $userID = null) { $result = $this->db->query('SELECT path FROM files WHERE name = ? AND user = ?', [$name, $userID])->result_array(); return !empty($result) ? $result[0]['path'] : null; } public function delete($id) { $filePath = $this->db->query('SELECT path FROM files WHERE ID = ? LIMIT 1', [$id])->result_array()[0]; unlink($filePath['path']); $this->db->query('DELETE FROM files WHERE ID = ? LIMIT 1', [$id]); } }