public function changeAvatar($userId)
 {
     $user = UserRepository::findUserById($userId);
     if (!$user) {
         $this->sendResponse(array('success' => false, 'message' => 'User is not existing!'));
     }
     if (empty($_FILES)) {
         $this->sendResponse(array('success' => false, 'message' => 'No file found!'));
     }
     $file = $_FILES["avatar"];
     if ($file['error'] > 0) {
         $this->sendResponse(array('success' => false, 'message' => $file['error']));
     }
     $fileName = $file['name'];
     $hashFileName = base64_encode(date('Ymdhis') . uniqid());
     $temp = explode('.', $file['name']);
     $extension = end($temp);
     if (!Validation::isValidImage($file)) {
         $this->sendResponse(array('success' => false, 'message' => 'File type is invalid!'));
     }
     $avatarFolder = $this->app->config['app']['avatar_path'] . DS . $userId;
     $fs = new Filesystem();
     try {
         $fs->mkdir($avatarFolder);
     } catch (IOExceptionInterface $e) {
         $this->app->log->getWriter()->write('An error occurred while creating your directory at ' . $e->getPath(), \Slim\Log::ERROR);
     }
     if ($fs->exists($avatarFolder)) {
         $fileTmpPath = $file['tmp_name'];
         $fileTargetPath = implode(DS, array($this->app->config['app']['avatar_path'], $userId, $hashFileName . '.' . $extension));
         move_uploaded_file($fileTmpPath, $fileTargetPath);
         $imagine = new Imagine();
         $image = $imagine->open($fileTargetPath);
         $image->thumbnail(new Box(180, 180))->save($fileTargetPath);
         $data = array('AvatarUrl' => implode('/', array($this->app->config['app']['asset_base_url'], 'avatar', $userId, $hashFileName . '.' . $extension)), 'LastModifiedDate' => date('Y-m-d H:i:s'));
         $success = UserRepository::update($user['UserId'], $data);
         if (!$success) {
             $this->sendResponse(array('success' => false, 'message' => 'Operation failed!'));
         }
         $this->sendResponse(array('success' => true, 'url' => $data['AvatarUrl']));
     } else {
         $this->sendResponse(array('success' => false, 'message' => 'Operation failed!'));
     }
 }
 private function processUploadedFile($fileInputName, $type)
 {
     if (empty($_FILES) || !isset($_FILES[$fileInputName])) {
         self::sendResponse(array('success' => false, 'message' => 'No file found!'));
     }
     $file = $_FILES[$fileInputName];
     if ($file['error'] > 0) {
         self::sendResponse(array('success' => false, 'message' => $file['error']));
     }
     if ($type == 'image' && !Validation::isValidImage($file) || $type == 'video' && !Validation::isValidVideo($file) || $type == 'audio' && !Validation::isValidAudio($file)) {
         self::sendResponse(array('success' => false, 'message' => 'File type is invalid!'));
     }
     $temp = explode('.', $file['name']);
     $targetFolder = implode(DS, array($this->app->config['app']['media_path'], date('Y'), date('m'), date('d')));
     $fs = new Filesystem();
     try {
         $fs->mkdir($targetFolder);
     } catch (IOExceptionInterface $e) {
         $this->app->log->getWriter()->write('An error occurred while creating your directory at ' . $e->getPath(), \Slim\Log::ERROR);
     }
     if (!$fs->exists($targetFolder)) {
         $this->sendOperationFailedResult('File');
     }
     $hashFileName = base64_encode(date('Ymdhis') . uniqid());
     $rtn = array('Extention' => end($temp), 'RawFileName' => $file['name'], 'HashFileName' => $hashFileName, 'FileTmpPath' => $file['tmp_name'], 'Url' => implode('/', array($this->app->config['app']['asset_base_url'], 'media', date('Y'), date('m'), date('d'), $hashFileName . '.' . end($temp))));
     $fileTargetPath = implode(DS, array($this->app->config['app']['media_path'], date('Y'), date('m'), date('d'), $rtn['HashFileName'] . '.' . $rtn['Extention']));
     move_uploaded_file($rtn['FileTmpPath'], $fileTargetPath);
     if ($type == 'image') {
         $imagine = new Imagine();
         $image = $imagine->open($fileTargetPath);
         $image->thumbnail(new Box(180, 180))->save(str_replace('.' . $rtn['Extention'], '_180x180.' . $rtn['Extention'], $fileTargetPath));
         $rtn['ThumbUrl'] = implode('/', array($this->app->config['app']['asset_base_url'], 'media', date('Y'), date('m'), date('d'), $rtn['HashFileName'] . '_180x180.' . $rtn['Extention']));
     }
     return $rtn;
 }