Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Created by PhpStorm.
- * User: Balint
- * Date: 2019. 06. 21.
- * Time: 21:46
- */
- namespace App\Controllers;
- use App\Models\User;
- use App\Models\Item;
- use PHPUnit\Util\Exception;
- use Slim\Http\UploadedFile;
- use Respect\Validation\Validator as v;
- #Item controller.
- class ItemController extends Controller
- {
- protected function sendResponse($response, $message, $status)
- {
- return $response->withStatus($status)
- ->withHeader('Content-Type', 'application/json')
- ->write($message);
- }
- #Create item.
- public function create($request, $response, $args)
- {
- try {
- $token = $request->getParam('token');
- if ($token) {
- $uploadedFiles = $request->getParam('image');
- #Check has file.
- if(!$uploadedFiles) {
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'NO_IMAGE',
- ],
- ]
- ), 200);
- }
- #Validate fields.
- $validation = $this->container->validator->validate(
- $request,
- [
- 'name' => v::notEmpty(),
- 'weight' => v::numeric()->notEmpty(),
- 'height' => v::numeric()->notEmpty(),
- 'width' => v::numeric()->notEmpty(),
- 'features' => v::notEmpty(),
- 'item_number' => v::notEmpty(),
- ]
- );
- #Has validate error.
- if ($validation->failed()) {
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'VALIDATION_ERROR',
- 'errors' => $validation->getErrors(),
- ],
- ]
- ), 200);
- }
- #Check token.
- $user = User::where('token', $token)->first();
- if ($user) {
- $directory = $this->container->get('upload_directory');
- foreach ($uploadedFiles as $uFile){
- $filename = uniqid().".jpg";
- if(file_put_contents($filename,$uFile)){
- $filename = $this->base64_to_jpeg($uFile, $directory.DIRECTORY_SEPARATOR.$filename);
- }
- }
- #'name','width','height', 'image_url' , 'weight', 'features', 'item_number'
- $item = Item::create(
- [
- 'name' => $request->getParam('name'),
- 'width' => $request->getParam('width'),
- 'height' => $request->getParam('height'),
- 'image_url' => '/item_images/' . $filename,
- 'weight' => $request->getParam('weight'),
- 'features' => $request->getParam('features'),
- 'item_number' => $request->getParam('item_number'),
- ]
- );
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'SUCCESS',
- ],
- ]
- ),200);
- } else {
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'WRONG_TOKEN',
- ],
- ]
- ),201);
- }
- } else {
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'NO_TOKEN',
- ],
- ]
- ),201);
- }
- } catch (Exception $e) {
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'UNKNOWN_ERROR',
- 'error' => $e->getMessage(),
- ],
- ]
- ),500);
- }
- }
- public function moveToShelf($request, $response){
- $token = $request->getParam('token');
- $itemId = $request->getParam('id');
- if(!$itemId){
- //TODO: Send failed response.
- }
- if($token){
- $user = User::where('token', $token)->first();
- if($user){
- $item = Item::where('id', $itemId)->first();
- if($item){
- if($item->shelf == 1){
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'CURRENTLY_ON_THE_SHELF',
- ],
- ]
- ),200);
- }
- $item->update([
- 'shelf' => '1',
- ]);
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'SUCCESS',
- ],
- ]
- ),200);
- }
- else{
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'ITEM_DOESNT_EXIST',
- ],
- ]
- ),200);
- }
- }
- else{
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'WRONG_TOKEN',
- ],
- ]
- ),201);
- }
- }
- else{
- $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'NO_TOKEN',
- ],
- ]
- ),201);
- }
- }
- public function getShelf($request, $response){
- $token = $request->getParam('token');
- if($token){
- $user = User::where('token', $token)->first();
- if(!$user){
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'WRONG_TOKEN'
- ],
- ]
- ),201);
- }
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => Item::where('shelf', '1')->get(),
- ]
- ),200);
- }
- else{
- return $this->sendResponse($response, json_encode(
- [
- "status_code" => $response->getStatusCode(),
- 'data' => [
- 'status' => 'NO_TOKEN'
- ],
- ]
- ),201);
- }
- }
- function base64_to_jpeg($base64_string, $output_file) {
- // open the output file for writing
- $ifp = fopen( $output_file, 'wb' );
- // split the string on commas
- // $data[ 0 ] == "data:image/png;base64"
- // $data[ 1 ] == <actual base64 string>
- $data = explode( ',', $base64_string );
- // we could add validation here with ensuring count( $data ) > 1
- fwrite( $ifp, base64_decode( $data[ 1 ] ) );
- // clean up the file resource
- fclose( $ifp );
- return $output_file;
- }
- #Set file's destination.
- function moveUploadedFile($directory, UploadedFile $uploadedFile)
- {
- $extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
- $basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
- $filename = sprintf('%s.%0.8s', $basename, $extension);
- $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
- return $filename;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement