Exemplo n.º 1
0
 public function updateImage()
 {
     $md5_1 = \Yii::$app->security->generateRandomString(2);
     $md5_2 = \Yii::$app->security->generateRandomString(2);
     /* @var $modelPhoto \phpnt\cropper\models\Photo */
     $paramsCrop = Json::decode($this->imageData['imageCrop']);
     $model = new ImageForm();
     $model->image = UploadedFile::getInstance($model, 'image');
     if ($model->validate()) {
         $smallFileName = time() . '_' . \Yii::$app->user->id . '_small.' . $model->image->extension;
         $fileName = time() . '_' . \Yii::$app->user->id . '.' . $model->image->extension;
         $modelPhoto = Photo::findOne($this->imageData['image_id']);
         $modelDeletePhoto = new Photo();
         $modelDeletePhoto->file = $modelPhoto->file;
         $modelDeletePhoto->file_small = $modelPhoto->file_small;
         $modelDeletePhoto->type = $modelPhoto->type;
         $modelDeletePhoto->object_id = $modelPhoto->object_id;
         $modelDeletePhoto->user_id = $modelPhoto->user_id;
         $modelDeletePhoto->deleted = 1;
         $modelDeletePhoto->save();
         $deleteFile = $modelPhoto->file;
         $deleteSmallFile = $modelPhoto->file_small;
         $modelPhoto->file = $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName;
         $modelPhoto->file_small = $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $smallFileName;
         $modelPhoto->type = $this->imageData['images_label'];
         $modelPhoto->object_id = $this->imageData['object_id'];
         $modelPhoto->user_id = \Yii::$app->user->id;
         $commit = true;
         $transaction = \Yii::$app->db->beginTransaction();
         try {
             if ($modelPhoto->save() && $commit) {
                 FileHelper::createDirectory(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/', $mode = 509);
                 if ($model->image->saveAs(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName)) {
                     $image = Image::getImagine();
                     $newImage = $image->open(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName);
                     $newImage->rotate($paramsCrop['rotate']);
                     $paramsCrop['x'] = $paramsCrop['x'] > 0 ? $paramsCrop['x'] : 0;
                     $paramsCrop['y'] = $paramsCrop['y'] > 0 ? $paramsCrop['y'] : 0;
                     if ($newImage->crop(new Point($paramsCrop['x'], $paramsCrop['y']), new Box($paramsCrop['width'], $paramsCrop['height']))->save(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName)) {
                         $newImage = $image->open(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName);
                         $newImage->thumbnail(new Box($this->imageData['imageSmallWidth'], $this->imageData['imageSmallHeight']))->save(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $smallFileName);
                         if ($this->deleteImageFile($deleteFile) && $this->deleteImageFile($deleteSmallFile)) {
                             $transaction->commit();
                         }
                     }
                 }
                 \Yii::$app->session->set('image', $modelPhoto->id);
                 \Yii::$app->session->remove('error');
             } else {
                 \Yii::$app->session->set('error', 'Изображение не добавлено.');
                 \Yii::$app->session->remove('image');
             }
         } catch (Exception $e) {
             $this->deleteImageFile(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $fileName);
             $this->deleteImageFile(\Yii::getAlias($this->imageData['baseUrl']) . $this->imageData['imagePath'] . $md5_1 . '/' . $md5_2 . '/' . $smallFileName);
             $transaction->rollBack();
         }
     } else {
         \Yii::$app->session->set('error', $model->errors['image']['0']);
         \Yii::$app->session->remove('image');
     }
 }