Advertisement
Guest User

Untitled

a guest
Jul 18th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.61 KB | None | 0 0
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Balint
  5. * Date: 2019. 06. 21.
  6. * Time: 21:46
  7. */
  8.  
  9. namespace App\Controllers;
  10.  
  11. use App\Models\User;
  12. use App\Models\Item;
  13. use PHPUnit\Util\Exception;
  14. use Slim\Http\UploadedFile;
  15. use Respect\Validation\Validator as v;
  16.  
  17. #Item controller.
  18. class ItemController extends Controller
  19. {
  20. protected function sendResponse($response, $message, $status)
  21. {
  22. return $response->withStatus($status)
  23. ->withHeader('Content-Type', 'application/json')
  24. ->write($message);
  25. }
  26.  
  27. #Create item.
  28. public function create($request, $response, $args)
  29. {
  30. try {
  31.  
  32. $token = $request->getParam('token');
  33.  
  34. if ($token) {
  35.  
  36. $uploadedFiles = $request->getParam('image');
  37.  
  38. #Check has file.
  39. if(!$uploadedFiles) {
  40.  
  41. return $this->sendResponse($response, json_encode(
  42. [
  43. "status_code" => $response->getStatusCode(),
  44. 'data' => [
  45. 'status' => 'NO_IMAGE',
  46. ],
  47. ]
  48. ), 200);
  49. }
  50.  
  51. #Validate fields.
  52. $validation = $this->container->validator->validate(
  53. $request,
  54. [
  55. 'name' => v::notEmpty(),
  56. 'weight' => v::numeric()->notEmpty(),
  57. 'height' => v::numeric()->notEmpty(),
  58. 'width' => v::numeric()->notEmpty(),
  59. 'features' => v::notEmpty(),
  60. 'item_number' => v::notEmpty(),
  61. ]
  62. );
  63.  
  64. #Has validate error.
  65. if ($validation->failed()) {
  66. return $this->sendResponse($response, json_encode(
  67. [
  68. "status_code" => $response->getStatusCode(),
  69. 'data' => [
  70. 'status' => 'VALIDATION_ERROR',
  71. 'errors' => $validation->getErrors(),
  72. ],
  73. ]
  74. ), 200);
  75. }
  76.  
  77. #Check token.
  78. $user = User::where('token', $token)->first();
  79.  
  80. if ($user) {
  81.  
  82. $directory = $this->container->get('upload_directory');
  83.  
  84. foreach ($uploadedFiles as $uFile){
  85. $filename = uniqid().".jpg";
  86. if(file_put_contents($filename,$uFile)){
  87. $filename = $this->base64_to_jpeg($uFile, $directory.DIRECTORY_SEPARATOR.$filename);
  88. }
  89. }
  90. #'name','width','height', 'image_url' , 'weight', 'features', 'item_number'
  91. $item = Item::create(
  92. [
  93. 'name' => $request->getParam('name'),
  94. 'width' => $request->getParam('width'),
  95. 'height' => $request->getParam('height'),
  96. 'image_url' => '/item_images/' . $filename,
  97. 'weight' => $request->getParam('weight'),
  98. 'features' => $request->getParam('features'),
  99. 'item_number' => $request->getParam('item_number'),
  100. ]
  101. );
  102. $this->sendResponse($response, json_encode(
  103. [
  104. "status_code" => $response->getStatusCode(),
  105. 'data' => [
  106. 'status' => 'SUCCESS',
  107. ],
  108. ]
  109. ),200);
  110. } else {
  111. $this->sendResponse($response, json_encode(
  112. [
  113. "status_code" => $response->getStatusCode(),
  114. 'data' => [
  115. 'status' => 'WRONG_TOKEN',
  116. ],
  117. ]
  118. ),201);
  119. }
  120. } else {
  121. $this->sendResponse($response, json_encode(
  122. [
  123. "status_code" => $response->getStatusCode(),
  124. 'data' => [
  125. 'status' => 'NO_TOKEN',
  126. ],
  127. ]
  128. ),201);
  129. }
  130. } catch (Exception $e) {
  131.  
  132. $this->sendResponse($response, json_encode(
  133. [
  134. "status_code" => $response->getStatusCode(),
  135. 'data' => [
  136. 'status' => 'UNKNOWN_ERROR',
  137. 'error' => $e->getMessage(),
  138. ],
  139. ]
  140. ),500);
  141. }
  142. }
  143.  
  144. public function moveToShelf($request, $response){
  145. $token = $request->getParam('token');
  146. $itemId = $request->getParam('id');
  147.  
  148. if(!$itemId){
  149. //TODO: Send failed response.
  150. }
  151. if($token){
  152.  
  153. $user = User::where('token', $token)->first();
  154.  
  155. if($user){
  156. $item = Item::where('id', $itemId)->first();
  157.  
  158. if($item){
  159.  
  160. if($item->shelf == 1){
  161.  
  162. return $this->sendResponse($response, json_encode(
  163. [
  164. "status_code" => $response->getStatusCode(),
  165. 'data' => [
  166. 'status' => 'CURRENTLY_ON_THE_SHELF',
  167. ],
  168. ]
  169. ),200);
  170. }
  171.  
  172. $item->update([
  173. 'shelf' => '1',
  174. ]);
  175.  
  176. $this->sendResponse($response, json_encode(
  177. [
  178. "status_code" => $response->getStatusCode(),
  179. 'data' => [
  180. 'status' => 'SUCCESS',
  181. ],
  182. ]
  183. ),200);
  184. }
  185. else{
  186.  
  187. $this->sendResponse($response, json_encode(
  188. [
  189. "status_code" => $response->getStatusCode(),
  190. 'data' => [
  191. 'status' => 'ITEM_DOESNT_EXIST',
  192. ],
  193. ]
  194. ),200);
  195. }
  196. }
  197. else{
  198. $this->sendResponse($response, json_encode(
  199. [
  200. "status_code" => $response->getStatusCode(),
  201. 'data' => [
  202. 'status' => 'WRONG_TOKEN',
  203. ],
  204. ]
  205. ),201);
  206. }
  207. }
  208. else{
  209. $this->sendResponse($response, json_encode(
  210. [
  211. "status_code" => $response->getStatusCode(),
  212. 'data' => [
  213. 'status' => 'NO_TOKEN',
  214. ],
  215. ]
  216. ),201);
  217. }
  218. }
  219.  
  220. public function getShelf($request, $response){
  221. $token = $request->getParam('token');
  222.  
  223. if($token){
  224. $user = User::where('token', $token)->first();
  225.  
  226. if(!$user){
  227. return $this->sendResponse($response, json_encode(
  228. [
  229. "status_code" => $response->getStatusCode(),
  230. 'data' => [
  231. 'status' => 'WRONG_TOKEN'
  232. ],
  233. ]
  234. ),201);
  235. }
  236. return $this->sendResponse($response, json_encode(
  237. [
  238. "status_code" => $response->getStatusCode(),
  239. 'data' => Item::where('shelf', '1')->get(),
  240. ]
  241. ),200);
  242. }
  243. else{
  244. return $this->sendResponse($response, json_encode(
  245. [
  246. "status_code" => $response->getStatusCode(),
  247. 'data' => [
  248. 'status' => 'NO_TOKEN'
  249. ],
  250. ]
  251. ),201);
  252. }
  253. }
  254.  
  255. function base64_to_jpeg($base64_string, $output_file) {
  256. // open the output file for writing
  257. $ifp = fopen( $output_file, 'wb' );
  258.  
  259. // split the string on commas
  260. // $data[ 0 ] == "data:image/png;base64"
  261. // $data[ 1 ] == <actual base64 string>
  262. $data = explode( ',', $base64_string );
  263.  
  264. // we could add validation here with ensuring count( $data ) > 1
  265. fwrite( $ifp, base64_decode( $data[ 1 ] ) );
  266.  
  267. // clean up the file resource
  268. fclose( $ifp );
  269.  
  270. return $output_file;
  271. }
  272.  
  273. #Set file's destination.
  274. function moveUploadedFile($directory, UploadedFile $uploadedFile)
  275. {
  276. $extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
  277. $basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
  278. $filename = sprintf('%s.%0.8s', $basename, $extension);
  279.  
  280. $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
  281.  
  282. return $filename;
  283. }
  284. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement