Пример #1
0
    /**
     * processing image uploads
     *
     * @todo sizes should be customizable
     */
    public function uploadProcess(&$vars)
    {
        // NEW CHECKS
        if (!($member = $this->getLoggedInMember())) {
            $vars['error'] = 'Gallery_NotLoggedIn';
            return false;
        }
        if (!isset($_FILES['gallery-file']) || !is_array($_FILES['gallery-file']) || count($_FILES['gallery-file']) == 0) {
            $vars['error'] = 'Gallery_UploadError';
            return false;
        }
        $noError = true;
        // flag for error on one file
        $userDir = new PDataDir('gallery/user' . $member->get_userid());
        $insert = $this->dao->prepare('
INSERT INTO `gallery_items`
(`id`, `user_id_foreign`, `file`, `original`, `flags`, `mimetype`, `width`, `height`, `title`, `created`)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
            ');
        $itemId = false;
        $insert->bindParam(0, $itemId);
        $userId = $member->get_userid();
        $insert->bindParam(1, $userId);
        $hash = false;
        $insert->bindParam(2, $hash);
        $orig = false;
        $insert->bindParam(3, $orig);
        $flags = 0;
        $insert->bindParam(4, $flags);
        $mimetype = false;
        $insert->bindParam(5, $mimetype);
        $width = false;
        $insert->bindParam(6, $width);
        $height = false;
        $insert->bindParam(7, $height);
        $title = false;
        $insert->bindParam(8, $title);
        foreach ($_FILES['gallery-file']['error'] as $key => $error) {
            $fileName = $_FILES['gallery-file']['name'][$key];
            // if upload failed, set error message
            if (!empty($fileName) && $error != UPLOAD_ERR_OK) {
                $noError = false;
                switch ($error) {
                    case UPLOAD_ERR_INI_SIZE:
                    case UPLOAD_ERR_FORM_SIZE:
                        $vars['fileErrors'][$fileName] = 'Gallery_UploadFileTooLarge';
                        break;
                    default:
                        $vars['fileErrors'][$fileName] = 'Gallery_UploadError';
                        break;
                }
            } elseif (!empty($fileName)) {
                // upload succeeded -> check if image
                $img = new MOD_images_Image($_FILES['gallery-file']['tmp_name'][$key]);
                if (!$img->isImage()) {
                    $noError = false;
                    $vars['fileErrors'][$fileName] = 'Gallery_UploadNotImage';
                } else {
                    // upload is image
                    // resize
                    $size = $img->getImageSize();
                    $original_x = min($size[0], PVars::getObj('images')->max_width);
                    $original_y = min($size[1], PVars::getObj('images')->max_height);
                    $tempDir = dirname($_FILES['gallery-file']['tmp_name'][$key]);
                    $resizedName = md5($_FILES['gallery-file']['tmp_name'][$key]) . '_resized';
                    $img->createThumb($tempDir, $resizedName, $original_x, $original_y, true, 'ratio');
                    $tempFile = $tempDir . '/' . $resizedName;
                    // create new image object from resized image
                    $img = new MOD_images_Image($tempFile);
                    $size = $img->getImageSize();
                    $type = $size[2];
                    $hash = $img->getHash();
                    if ($userDir->fileExists($hash)) {
                        continue;
                    }
                    if (!$userDir->copyTo($tempFile, $hash)) {
                        continue;
                    }
                    if (!($result = $this->createThumbnails($userDir, $img))) {
                        return false;
                    }
                    $itemId = $this->dao->nextId('gallery_items');
                    $orig = $_FILES['gallery-file']['name'][$key];
                    $mimetype = image_type_to_mime_type($type);
                    $width = $size[0];
                    $height = $size[1];
                    $title = $orig;
                    try {
                        $insert->execute();
                    } catch (PException $e) {
                        error_log($e->__toString());
                    }
                    if ($vars['galleryId']) {
                        $this->dao->exec("INSERT INTO `gallery_items_to_gallery` SET `gallery_id_foreign` = '" . $vars['galleryId'] . "', `item_id_foreign`= " . $itemId);
                    }
                    $vars['fileErrors'][$_FILES['gallery-file']['name'][$key]] = 'Gallery_UploadFileSuccessfule';
                    unlink($tempFile);
                }
            }
        }
        return $noError;
    }
Пример #2
0
 /**
  * takes care of a group image being uploaded
  *
  * @access private
  * @return mixed - false on fail or the name of the uploaded image
  */
 private function handleImageUpload()
 {
     if ($_FILES['group_image']['error'] != 0) {
         return false;
     } else {
         $dir = new PDataDir('groups');
         $img = new MOD_images_Image($_FILES['group_image']['tmp_name']);
         $new_name = $img->getHash();
         if (empty($new_name)) {
             return false;
         }
         if (!($dir->fileExists($new_name) || $dir->copyTo($_FILES['group_image']['tmp_name'], $new_name))) {
             return false;
         } else {
             // yup, hackish way of resizing an image
             // feel free to add a resize function to MOD_images_Image and change this bit
             // or create an image entity with all needed functionality in ONE place
             // ... in my dreams ...
             $img->createThumb($dir->dirName(), $new_name, 300, 300, true);
             $img->createThumb($dir->dirName(), 'thumb', 100, 100);
             return $new_name;
         }
     }
 }