From: Cameron Ball Date: Fri, 26 Sep 2014 04:41:44 +0000 (+0800) Subject: File upload stuff. X-Git-Url: http://git.cameron1729.xyz/?p=rock.divinelegy.git;a=commitdiff_plain;h=c1983795a8ea52fee52280f6d570acc86f78cfeb File upload stuff. --- diff --git a/Controllers/IndexController.php b/Controllers/IndexController.php index 101d71b..8587184 100644 --- a/Controllers/IndexController.php +++ b/Controllers/IndexController.php @@ -28,7 +28,7 @@ class IndexController implements IDivineController $queryConstraints = new SimfileQueryConstraints(); $queryConstraints->stepsHaveRating(15); - $simfiles = $this->_simfileRepository->findByTitle('a'); + $simfiles = $this->_simfileRepository->findByBeginnerMeter(2); foreach($simfiles as $simfile) { diff --git a/Controllers/SimfileController.php b/Controllers/SimfileController.php index 5bf7e78..84bdfdf 100644 --- a/Controllers/SimfileController.php +++ b/Controllers/SimfileController.php @@ -5,6 +5,7 @@ namespace Controllers; use Controllers\IDivineController; use Services\Http\IHttpRequest; use Services\Http\IHttpResponse; +use Services\Uploads\IUploadManager; use DataAccess\StepMania\ISimfileRepository; class SimfileController implements IDivineController @@ -12,14 +13,17 @@ class SimfileController implements IDivineController private $_simfileRepository; private $_response; private $_request; + private $_uploadManager; public function __construct( IHttpRequest $request, IHttpResponse $response, + IUploadManager $uploadManager, ISimfileRepository $repository ) { $this->_request = $request; $this->_response = $response; + $this->_uploadManager = $uploadManager; $this->_simfileRepository = $repository; } @@ -44,6 +48,19 @@ class SimfileController implements IDivineController ->sendResponse(); } + public function uploadAction() + { + //logic for if pack or individual file + + //TODO: Put directory in config ? + $filenames = $this->_uploadManager->setDestination('../files/StepMania/') + ->process(); + + echo '
';
+        print_r($filenames);
+        echo '
'; + } + public function testAction($testArg) { $this->_response->setHeader('Content-Type', 'application/json') diff --git a/DataAccess/StepMania/ISimfileRepository.php b/DataAccess/StepMania/ISimfileRepository.php index 940bcc0..bf15db2 100644 --- a/DataAccess/StepMania/ISimfileRepository.php +++ b/DataAccess/StepMania/ISimfileRepository.php @@ -9,14 +9,14 @@ use Domain\Entities\StepMania\ISimfile; interface ISimfileRepository extends IRepository { public function findByTitle($title, ISimfileQueryConstraints $constraints); - public function findByArtist($artist); - public function findByBpm($high, $low); - public function findByStepArtist($artistName); - public function findByLightMeter($feet); - public function findByBeginnerMeter($feet); - public function findByMediumMeter($feet); - public function findByHardMeter($feet); - public function findByExpertMeter($feet); + public function findByArtist($artist, ISimfileQueryConstraints $constraints); + public function findByBpm($high, $low, ISimfileQueryConstraints $constraints); + public function findByStepArtist($artistName, ISimfileQueryConstraints $constraints); + public function findByLightMeter($feet, ISimfileQueryConstraints $constraints); + public function findByBeginnerMeter($feet, ISimfileQueryConstraints $constraints); + public function findByMediumMeter($feet, ISimfileQueryConstraints $constraints); + public function findByHardMeter($feet, ISimfileQueryConstraints $constraints); + public function findByExpertMeter($feet, ISimfileQueryConstraints $constraints); public function save(ISimfile $entity); public function remove(ISimfile $entity); } diff --git a/DataAccess/StepMania/SimfileRepository.php b/DataAccess/StepMania/SimfileRepository.php index 7cd8522..87e6eaf 100644 --- a/DataAccess/StepMania/SimfileRepository.php +++ b/DataAccess/StepMania/SimfileRepository.php @@ -5,6 +5,7 @@ namespace DataAccess\StepMania; use DataAccess\StepMania\ISimfileRepository; use DataAccess\DataMapper\IDataMapper; use DataAccess\Queries\IQueryBuilderFactory; +use DataAccess\Queries\IQueryBuilder; use DataAccess\Queries\StepMania\ISimfileQueryConstraints; use Domain\Entities\StepMania\ISimfile; @@ -43,25 +44,87 @@ class SimfileRepository implements ISimfileRepository ; } + private function applyConstraintsAndReturn(ISimfileQueryConstraints $constraints = NULL, IQueryBuilder $queryBuilder) + { + if($constraints) + { + $constraints->applyTo($queryBuilder); + } + + return $this->_dataMapper->map('Simfile', $queryBuilder); + } + public function findByTitle($title, ISimfileQueryConstraints $constraints = NULL) { $queryBuilder = $this->_queryBuilderFactory->createInstance(); $queryBuilder->where('title', 'LIKE', "%%$title%%"); - if($constraints) + return $this->applyConstraintsAndReturn($constraints, $queryBuilder); + } + + public function findByArtist($artist, ISimfileQueryConstraints $constraints = NULL) + { + $queryBuilder = $this->_queryBuilderFactory->createInstance(); + $queryBuilder->where('artist', 'LIKE', "%%$artist%%"); + + return $this->applyConstraintsAndReturn($constraints, $queryBuilder); + } + + public function findByBpm($high, $low = null, ISimfileQueryConstraints $constraints = NULL) + { + $queryBuilder = $this->_queryBuilderFactory->createInstance(); + $queryBuilder->where('bpm_high', '=', $high); + + if($low) { - $constraints->applyTo($queryBuilder); + $queryBuilder->where('bpm_low', '=', $low); } - - return $this->_dataMapper->map('Simfile', $queryBuilder); + + return $this->applyConstraintsAndReturn($constraints, $queryBuilder); } - public function findByArtist($artist){} - public function findByBpm($high, $low){} - public function findByStepArtist($artistName){} - public function findByLightMeter($feet){} - public function findByBeginnerMeter($feet){} - public function findByMediumMeter($feet){} - public function findByHardMeter($feet){} - public function findByExpertMeter($feet){} + public function findByStepArtist($artistName, ISimfileQueryConstraints $constraints = null) + { + $queryBuilder = $this->_queryBuilderFactory->createInstance(); + $queryBuilder->join('inner', 'simfiles', 'id', 'steps', 'simfile_id') + ->join('inner', 'steps', 'step_artist_id', 'step_artists', 'id') + ->where('tag', 'LIKE', "%%$artistName%%"); + + return $this->applyConstraintsAndReturn($constraints, $queryBuilder); + } + + private function findByDifficultyAndRating($difficulty, $rating, ISimfileQueryConstraints $constraints = null) + { + $queryBuilder = $this->_queryBuilderFactory->createInstance(); + $queryBuilder->join('inner', 'simfiles', 'id', 'steps', 'simfile_id') + ->where('difficulty', '=', $difficulty) + ->where('rating', '=', $rating); + + return $this->applyConstraintsAndReturn($constraints, $queryBuilder); + } + + public function findByLightMeter($feet, ISimfileQueryConstraints $constraints = null) + { + return $this->findByDifficultyAndRating('light', $feet, $constraints); + } + + public function findByBeginnerMeter($feet, ISimfileQueryConstraints $constraints = null) + { + return $this->findByDifficultyAndRating('beginner', $feet, $constraints); + } + + public function findByMediumMeter($feet, ISimfileQueryConstraints $constraints = null) + { + return $this->findByDifficultyAndRating('medium', $feet, $constraints); + } + + public function findByHardMeter($feet, ISimfileQueryConstraints $constraints = null) + { + return $this->findByDifficultyAndRating('challenge', $feet, $constraints); + } + + public function findByExpertMeter($feet, ISimfileQueryConstraints $constraints = null) + { + return $this->findByDifficultyAndRating('expert', $feet, $constraints); + } } diff --git a/Services/Uploads/File.php b/Services/Uploads/File.php new file mode 100644 index 0000000..084ef75 --- /dev/null +++ b/Services/Uploads/File.php @@ -0,0 +1,35 @@ +_name = $name; + $this->_type = $type; + $this->_tempName = $tempName; + $this->_size = $size; + } + + public function getExtension() + { + return pathinfo($this->_name, PATHINFO_EXTENSION); + } + + public function getTempName() + { + return $this->_tempName; + } + + public function getName() + { + return $this->_name; + } +} diff --git a/Services/Uploads/FileFactory.php b/Services/Uploads/FileFactory.php new file mode 100644 index 0000000..8d90c8f --- /dev/null +++ b/Services/Uploads/FileFactory.php @@ -0,0 +1,13 @@ +_fileFactory = $fileFactory; + + if($_FILES) { + foreach($_FILES as $file) + { + $this->_files[] = $this->_fileFactory->createInstance( + $file['name'], + $file['type'], + $file['tmp_name'], + $file['size'] + ); + } + } + } + + public function setDestination($path) { + if(!$this->destinationExists($path)) + { + throw new Exception('Invalid path. Path does not exist.'); + } + + $this->_destination = $path; + + return $this; + } + + private function destinationExists($path) { + return file_exists($path); + } + + private function saveFile(IFile $file) + { + if($this->_destination) + { + $randomName = $this->randomFilename(); + $result = move_uploaded_file($file->getTempName(), $this->_destination . '/' . $randomName . '.' . $file->getExtension()); + } + + if(!$result) + { + throw new Exception("Could not save file."); + } + + return $randomName; + } + + private function randomFilename() + { + return sha1(mt_rand(1, 9999) . $this->_destination . uniqid() . time()); + } + + public function process() + { + $results = array(); + + foreach($this->_files as $file) + { + $results[$file->getName()] = $this->saveFile($file); + } + + return $results; + } +} diff --git a/config/DI.php b/config/DI.php index 2061c4f..992b015 100644 --- a/config/DI.php +++ b/config/DI.php @@ -14,6 +14,8 @@ return [ 'Services\Http\IHttpRequest' => DI\object('Services\Http\HttpRequest'), 'Services\Routing\IRouter' => DI\object('Services\Routing\Router') ->constructor(DI\link('router.maps')), + 'Services\Uploads\IUploadManager' => DI\object('Services\Uploads\UploadManager'), + 'Services\Uploads\IFileFactory' => DI\object('Services\Uploads\FileFactory'), //DA 'DataAccess\StepMania\ISimfileRepository' => DI\object('DataAccess\StepMania\SimfileRepository'), diff --git a/config/Routes.php b/config/Routes.php index a38b782..32a4255 100644 --- a/config/Routes.php +++ b/config/Routes.php @@ -7,6 +7,12 @@ return [ 'action' => 'list' ], + '/simfiles/upload' => [ + 'methods' => ['POST'], + 'controller' => 'Simfile', + 'action' => 'upload' + ], + '/simfiles/argTest/:testarg' => [ 'methods' => ['GET'], 'controller' => 'Simfile', diff --git a/files/StepMania/4e8b9a3fc8f0a6473e4734c979c57ab83606ba85.jpg b/files/StepMania/4e8b9a3fc8f0a6473e4734c979c57ab83606ba85.jpg new file mode 100644 index 0000000..2de58fd Binary files /dev/null and b/files/StepMania/4e8b9a3fc8f0a6473e4734c979c57ab83606ba85.jpg differ diff --git a/files/StepMania/667fd7f14dc18941b6f0c338e0278e89b19cb46d.png b/files/StepMania/667fd7f14dc18941b6f0c338e0278e89b19cb46d.png new file mode 100644 index 0000000..e7b2ba1 Binary files /dev/null and b/files/StepMania/667fd7f14dc18941b6f0c338e0278e89b19cb46d.png differ diff --git a/public_html/index.php b/public_html/index.php index 0118b64..d892c87 100644 --- a/public_html/index.php +++ b/public_html/index.php @@ -1,4 +1,8 @@ + +
+ + +
+ + \ No newline at end of file