Exemplo n.º 1
0
 /**
  * Process upload image by AJAX 
  */
 public function uploadAction()
 {
     Pi::service('log')->mute();
     $module = $this->getModule();
     $config = Pi::config('', $module);
     $return = array('status' => false);
     $fakeId = $this->params('fake_id', 0);
     // Checking whether ID is empty
     if (empty($fakeId)) {
         $return['message'] = _a('Invalid fake ID!');
         echo json_encode($return);
         exit;
     }
     $rawInfo = $this->request->getFiles('upload');
     // Rename
     $ext = strtolower(pathinfo($rawInfo['name'], PATHINFO_EXTENSION));
     $rename = $fakeId . '.' . $ext;
     // Get path to store
     $destination = Media::getTargetDir('author', $module, true, false);
     $uploader = new UploadHandler(array('destination' => Pi::path($destination), 'rename' => $rename));
     $uploader->setExtension($config['image_extension'])->setSize($config['max_media_size']);
     // Checking whether uploaded file is valid
     if (!$uploader->isValid()) {
         $return['message'] = implode(', ', $uploader->getMessages());
         echo json_encode($return);
         exit;
     }
     $uploader->receive();
     $fileName = $destination . '/' . $rename;
     // Resolve allowed image extension
     $imageSize = array();
     $imageSizeRaw = getimagesize(Pi::path($fileName));
     $imageSize['w'] = $imageSizeRaw[0];
     $imageSize['h'] = $imageSizeRaw[1];
     $uploadInfo = array('tmp_name' => $fileName, 'w' => $imageSize['w'], 'h' => $imageSize['h']);
     // Save info to session
     $session = Media::getUploadSession($module, 'author');
     $session->{$fakeId} = $uploadInfo;
     // Prepare return data
     $return['data'] = array_merge(array('originalName' => $rawInfo['name'], 'size' => $rawInfo['size'], 'preview_url' => Pi::url($fileName), 'basename' => basename($fileName), 'type' => $ext, 'id' => $fakeId, 'filename' => $fileName), $imageSize);
     $return['status'] = true;
     echo json_encode($return);
     exit;
 }
Exemplo n.º 2
0
 /**
  * Processing media uploaded. 
  */
 public function uploadAction()
 {
     Pi::service('log')->mute();
     $module = $this->getModule();
     $config = Pi::config('', $module);
     $return = array('status' => false);
     $id = $this->params('id', 0);
     $fakeId = $this->params('fake_id', 0) ?: uniqid();
     $type = $this->params('type', 'attachment');
     $formName = $this->params('form_name', 'upload');
     // Checking whether ID is empty
     if (empty($id) && empty($fakeId)) {
         $return['message'] = _a('Invalid ID!');
         return json_encode($return);
         exit;
     }
     $width = $this->params('width', 0);
     $height = $this->params('height', 0);
     $rawInfo = $this->request->getFiles($formName);
     $ext = strtolower(pathinfo($rawInfo['name'], PATHINFO_EXTENSION));
     $rename = $id ?: $fakeId . '.' . $ext;
     $allowedExtension = $type == 'image' ? $config['image_extension'] : $config['media_extension'];
     $mediaSize = $type == 'image' ? $config['max_image_size'] : $config['max_media_size'];
     $destination = Media::getTargetDir('media', $module, true, true);
     $uploader = new UploadHandler(array('destination' => Pi::path($destination), 'rename' => $rename));
     $uploader->setExtension($allowedExtension)->setSize($mediaSize);
     // Get raw file name
     $rawName = null;
     if (empty($rawInfo)) {
         $content = $this->request->getContent();
         preg_match('/filename="(.+)"/', $content, $matches);
         $rawName = $matches[1];
     }
     // Checking whether uploaded file is valid
     if (!$uploader->isValid($rawName)) {
         $return['message'] = implode(', ', $uploader->getMessages());
         echo json_encode($return);
         exit;
     }
     $uploader->receive();
     $fileName = $destination . '/' . $rename;
     $rawName = $rawName ?: substr($rawInfo['name'], 0, strrpos($rawInfo['name'], '.'));
     // Resolve allowed image extension
     $imageExt = explode(',', $config['image_extension']);
     foreach ($imageExt as &$value) {
         $value = strtolower(trim($value));
     }
     // Scale image if file is image file
     $uploadInfo['tmp_name'] = $fileName;
     $uploadInfo['raw_name'] = $rawName;
     $imageSize = array();
     if (in_array($ext, $imageExt)) {
         $scaleImageSize = $this->scaleImageSize(Pi::path($fileName), $config);
         $uploadInfo['w'] = $width ?: $scaleImageSize['w'];
         $uploadInfo['h'] = $height ?: $scaleImageSize['h'];
         Media::saveImage($uploadInfo);
         $imageSizeRaw = getimagesize(Pi::path($fileName));
         $imageSize['w'] = $imageSizeRaw[0];
         $imageSize['h'] = $imageSizeRaw[1];
     }
     // Save uploaded media
     if ($id) {
         $row = $this->getModel('media')->find($id);
         if ($row->url && $row->url != $fileName) {
             unlink(Pi::path($row->url));
         }
         $row->url = $fileName;
         $row->type = $ext;
         $row->size = filesize(Pi::path($fileName));
         $row->meta = json_encode($imageSize);
         $row->save();
     } else {
         // Or save info to session
         $session = Media::getUploadSession($module, 'media');
         $session->{$fakeId} = $uploadInfo;
     }
     // Prepare return data
     $return['data'] = array_merge(array('originalName' => $rawInfo['name'], 'size' => $rawInfo['size'], 'preview_url' => Pi::url($fileName), 'basename' => basename($fileName), 'type' => $ext, 'id' => $id ?: $fakeId, 'filename' => $fileName), $imageSize);
     $return['status'] = true;
     echo json_encode($return);
     exit;
 }
Exemplo n.º 3
0
 /**
  * Process upload image by AJAX 
  */
 public function uploadAction()
 {
     $module = $this->getModule();
     $config = Pi::user()->config('');
     $result = array('status' => false);
     $fakeId = $this->params('fake_id', 0);
     // Checking whether ID is empty
     if (empty($fakeId)) {
         $result['message'] = __('Invalid token!');
         return $result;
     }
     $rawInfo = $this->request->getFiles('upload');
     // Rename
     $ext = strtolower(pathinfo($rawInfo['name'], PATHINFO_EXTENSION));
     $rename = $fakeId . '.' . $ext;
     // Get path to store
     $location = $this->config('path_tmp') ?: sprintf('upload/%s/tmp', $this->getModule());
     //$destination = Pi::path($location);
     $uploadConfig = Pi::service('avatar')->getOption('upload');
     $extension = implode(',', $uploadConfig['extension']);
     $maxFile = $config['max_size'] ? $config['max_size'] * 1024 : 0;
     $maxSize = array();
     if ($config['max_avatar_width']) {
         $maxSize['width'] = (int) $config['max_avatar_width'];
     }
     if ($config['max_avatar_height']) {
         $maxSize['height'] = (int) $config['max_avatar_height'];
     }
     $upload = new UploadHandler();
     $upload->setDestination($location)->setRename($rename)->setExtension($extension);
     if ($maxFile) {
         $upload->setSize($maxFile);
     }
     if ($maxSize) {
         $upload->setImageSize($maxSize);
     }
     // Get raw file name
     if (empty($rawInfo)) {
         $content = $this->request->getContent();
         preg_match('/filename="(.+)"/', $content, $matches);
         $rawName = $matches[1];
     } else {
         $rawName = null;
     }
     // Checking whether uploaded file is valid
     if (!$upload->isValid($rawName)) {
         $result['message'] = implode(', ', $upload->getMessages());
         return $result;
     }
     $upload->receive();
     //$fileName = $upload->getDestination() . '/' . $rename;
     $fileName = $location . '/' . $upload->getUploaded();
     // Resolve allowed image extension
     $imageSize = array();
     $imageSizeRaw = getimagesize(Pi::path($fileName));
     $imageSize['w'] = $imageSizeRaw[0];
     $imageSize['h'] = $imageSizeRaw[1];
     $uploadInfo = array('tmp_name' => $fileName, 'w' => $imageSize['w'], 'h' => $imageSize['h']);
     // Save info to session
     $session = $this->getUploadSession($module, 'avatar');
     $session->{$fakeId} = $uploadInfo;
     // Prepare return data
     $result['data'] = array_merge(array('originalName' => $rawInfo['name'], 'size' => $rawInfo['size'], 'preview_url' => Pi::url($fileName), 'basename' => basename($fileName), 'type' => $ext, 'id' => $fakeId, 'filename' => $fileName), $imageSize);
     $result['status'] = true;
     //return $result; for ie10+ bug
     Pi::service('log')->mute();
     echo json_encode($result);
     exit;
 }
Exemplo n.º 4
0
 public function uploadAction()
 {
     //Pi::service('log')->mute();
     $return = array('status' => 1, 'message' => '', 'image' => '');
     $rename = $this->tmpPrefix . '%random%';
     /**#@+
      * Just for demo for anonymous callback
      */
     /*
     $rename = function ($name)
     {
         $pos = strrpos($name, '.');
         if (false !== $pos) {
             $extension = substr($name, $pos);
             $name = substr($name, 0, $pos);
         } else {
             $extension = '';
         }
         $newName = $name . '.random-' .uniqid() . '.' . $extension;
         return $newName;
     };
     */
     /**#@-*/
     $uploader = new Upload(array('rename' => $rename));
     $uploader->setExtension('jpg,png,gif');
     //->setRename('tmp.%random%');
     //->setImageSize(array('maxWidth' => 600, 'maxHeight' => 500));
     if ($uploader->isValid()) {
         $uploader->receive();
         $file = $uploader->getUploaded('image');
         $return['image'] = $file;
     } else {
         $messages = $uploader->getMessages();
         $return = array('status' => 0, 'message' => implode('; ', $messages));
     }
     return $return;
 }