From f2401dcec718b09c44f02d8c644357c8b8c33aa6 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 12 Jan 2017 18:29:50 -0300 Subject: [PATCH] Ivan - Fix file uploader issues, add file upload in ticket creation [skip ci] --- server/controllers/system/init-settings.php | 3 ++- server/controllers/ticket/create.php | 24 ++++++++++++++++++++- server/libs/FileUploader.php | 13 +++++++---- server/libs/LinearCongruentialGenerator.php | 3 ++- tests/system/edit-settings.rb | 4 ++-- 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/server/controllers/system/init-settings.php b/server/controllers/system/init-settings.php index 6613b17a..a78a6c51 100644 --- a/server/controllers/system/init-settings.php +++ b/server/controllers/system/init-settings.php @@ -38,12 +38,13 @@ class InitSettingsController extends Controller { 'maintenance-mode' => 0, 'layout' => 'boxed', 'allow-attachments' => 0, - 'max-size' => 0, + 'max-size' => 1024, 'title' => 'Support Center', 'url' => 'http://www.opensupports.com/support', 'ticket-gap' => Hashing::generateRandomPrime(100000, 999999), 'file-gap' => Hashing::generateRandomPrime(100000, 999999), 'file-first-number' => Hashing::generateRandomNumber(100000, 999999), + 'file-quantity' => 0 ]); } diff --git a/server/controllers/ticket/create.php b/server/controllers/ticket/create.php index ac9f4c53..b9409361 100644 --- a/server/controllers/ticket/create.php +++ b/server/controllers/ticket/create.php @@ -60,7 +60,7 @@ class CreateController extends Controller { 'language' => $this->language, 'author' => $author, 'department' => $department, - 'file' => '', + 'file' => $this->uploadFile(), 'date' => Date::getCurrentDate(), 'unread' => false, 'unreadStaff' => true, @@ -75,4 +75,26 @@ class CreateController extends Controller { $this->ticketNumber = $ticket->ticketNumber; } + + private function uploadFile() { + if(!isset($_FILES['file'])) return ''; + + $maxSize = Setting::getSetting('max-size')->getValue(); + $fileGap = Setting::getSetting('file-gap')->getValue(); + $fileFirst = Setting::getSetting('file-first-number')->getValue(); + $fileQuantity = Setting::getSetting('file-quantity'); + + $fileUploader = FileUploader::getInstance(); + $fileUploader->setMaxSize($maxSize); + $fileUploader->setGeneratorValues($fileGap, $fileFirst, $fileQuantity->getValue()); + + if($fileUploader->upload($_FILES['file'])) { + $fileQuantity->value++; + $fileQuantity->store(); + + return $fileUploader->getFileName(); + } else { + throw new Exception(ERRORS::INVALID_FILE); + } + } } diff --git a/server/libs/FileUploader.php b/server/libs/FileUploader.php index dfc9c09b..8e01e089 100644 --- a/server/libs/FileUploader.php +++ b/server/libs/FileUploader.php @@ -4,6 +4,7 @@ class FileUploader extends FileManager { private $maxSize = 1024; private $linearCongruentialGenerator; private $linearCongruentialGeneratorOffset; + private $fileName; private static $instance = null; @@ -18,18 +19,18 @@ class FileUploader extends FileManager { private function __construct() {} public function upload($file) { - $newFileName = $this->generateNewName($file['name']); + $this->setNewName($file['name']); if($file['size'] > (1024 * $this->maxSize)) { return false; } - move_uploaded_file($file['tmp_name'], $this->getLocalPath() . $newFileName); + move_uploaded_file($file['tmp_name'], $this->getLocalPath() . $this->getFileName()); return true; } - private function generateNewName($fileName) { + private function setNewName($fileName) { $newName = $fileName; $newName = strtolower($newName); $newName = preg_replace('/\s+/', '_', $newName); @@ -38,7 +39,7 @@ class FileUploader extends FileManager { $newName = $this->linearCongruentialGenerator->generate($this->linearCongruentialGeneratorOffset) . '_' . $newName; } - return $newName; + $this->fileName = $newName; } public function setGeneratorValues($gap, $first, $offset) { @@ -52,5 +53,9 @@ class FileUploader extends FileManager { public function setMaxSize($maxSize) { $this->maxSize = $maxSize; } + + public function getFileName() { + return $this->fileName; + } } \ No newline at end of file diff --git a/server/libs/LinearCongruentialGenerator.php b/server/libs/LinearCongruentialGenerator.php index aafddb16..88df4141 100644 --- a/server/libs/LinearCongruentialGenerator.php +++ b/server/libs/LinearCongruentialGenerator.php @@ -21,7 +21,8 @@ class LinearCongruentialGenerator { } public function generate($offset) { - return ($this->first - $this->min + $offset * $this->gap) % ($this->max - $this->min + 1) + $this->min; + if($offset) return ($this->first - $this->min + $offset * $this->gap) % ($this->max - $this->min + 1) + $this->min; + else return $this->generateFirst(); } public function generateFirst() { diff --git a/tests/system/edit-settings.rb b/tests/system/edit-settings.rb index 0b2b77aa..69223599 100644 --- a/tests/system/edit-settings.rb +++ b/tests/system/edit-settings.rb @@ -10,7 +10,7 @@ describe'system/edit-settings' do "time-zone" => -3, "layout" => 'full-width', "allow-attachments" => 1, - "max-size" => 2, + "max-size" => 2048, "language" => 'en', "no-reply-email" => 'testemail@hotmail.com' }) @@ -27,7 +27,7 @@ describe'system/edit-settings' do (row['value']).should.equal('full-width') row = $database.getRow('setting', 'max-size', 'name') - (row['value']).should.equal('2') + (row['value']).should.equal('2048') row = $database.getRow('setting', 'language', 'name') (row['value']).should.equal('en')